{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c:\\Reaserch\\Code\\CEM\\AntennaGPT\\code\\Patch_Antenna.cst\n"
     ]
    }
   ],
   "source": [
    "# 原始程序 没有修改的\n",
    "#!/usr/bin/env python3\n",
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "@ccly\n",
    "\"\"\"\n",
    "import os\n",
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append(r\"C:\\Reaserch\\CSTStudioSuite2021\\AMD64\\python_cst_libraries\")\n",
    "import cst.interface\n",
    "path = os.getcwd()#获取当前py文件所在文件夹\n",
    "filename = 'Patch_Antenna.cst'\n",
    "fullname = os.path.join(path,filename)\n",
    "print(fullname)\n",
    "cst = cst.interface.DesignEnvironment()\n",
    "mws = cst.new_mws()\n",
    "mws.save(fullname)\n",
    "modeler = mws.modeler\n",
    "#贴片天线建模基本参数\n",
    "a = 38.6 #贴片长\n",
    "b = 38 #贴片宽\n",
    "w = 1.46 #馈线宽，100欧姆传输线\n",
    "l = 40 #馈线长\n",
    "lx = 100 #基板长\n",
    "ly = 100 #基板宽\n",
    "ts = 2 #基板厚\n",
    "tm = 0.035 #金属层厚\n",
    "Frq = [2,2.7] #工作频率，单位：GHz\n",
    "\n",
    "#在CST中加入结构参数，方便后续手动在CST文件中进行操作\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"a\", \"%f\")' % a)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"b\", \"%f\")' % b)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"w\", \"%f\")' % w)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"l\", \"%f\")' % l)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"lx\", \"%f\")' % lx)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ly\", \"%f\")' % ly)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ts\", \"%f\")' % ts)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"tm\", \"%f\")' % tm)\n",
    "#建模基本参数设置结束\n",
    "line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "#全局单位初始化\n",
    "sCommand = ['With Units',\n",
    "            '.Geometry \"mm\"',\n",
    "            '.Frequency \"ghz\"',\n",
    "            '.Time \"ns\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define units', sCommand)\n",
    "#全局单位初始化结束\n",
    "\n",
    "#工作频率设置\n",
    "sCommand = 'Solver.FrequencyRange \"%f\",\"%f\"'  % (Frq[0],Frq[1])\n",
    "modeler.add_to_history('define frequency range', sCommand)\n",
    "#工作频率设置结束\n",
    "\n",
    "#背景材料设置\n",
    "sCommand = ['With Background',\n",
    "            '.ResetBackground',\n",
    "            '.Type \"Normal\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define background', sCommand)\n",
    "#背景材料设置结束\n",
    "\n",
    "#边界条件设置。\n",
    "sCommand = ['With Boundary',\n",
    "            '.Xmin \"expanded open\"',\n",
    "            '.Xmax \"expanded open\"',\n",
    "            '.Ymin \"expanded open\"',\n",
    "            '.Ymax \"expanded open\"',\n",
    "            '.Zmin \"expanded open\"',\n",
    "            '.Zmax \"expanded open\"',\n",
    "            '.Xsymmetry \"none\"',\n",
    "            '.Ysymmetry \"none\"',\n",
    "            '.Zsymmetry \"none\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define boundary', sCommand)\n",
    "#边界条件设置结束\n",
    "\n",
    "#新建所需介质材料\n",
    "er1 = 2.65\n",
    "sCommand = ['With Material',\n",
    "            '.Reset',\n",
    "            '.Name \"material1\"',\n",
    "            '.FrqType \"all\"',\n",
    "            '.Type \"Normal\"',\n",
    "            '.Epsilon %f' %er1,\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define material: material265', sCommand)\n",
    "#新建所需介质材料结束\n",
    "\n",
    "#使Bounding Box显示\n",
    "sCommand = 'Plot.DrawBox \"True\"'\n",
    "modeler.add_to_history('switch bounding box', sCommand)\n",
    "#使Bounding Box显示结束\n",
    "\n",
    "#建模开始\n",
    "#调用Brick对象开始\n",
    "Str_Name='patch'\n",
    "Str_Component='Patch'\n",
    "Str_Material='PEC'\n",
    "#以下这一串可以写成函数\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-a/2\",\"a/2\"',\n",
    "            '.Yrange \"-b/2\",\"b/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "#以上这一串可以写成函数\n",
    "\n",
    "sCommand = 'Plot.ZoomToStructure'\n",
    "modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "Str_Name='line1'\n",
    "Str_Component='Feed'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"-a/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "\n",
    "Str_Name='line2'\n",
    "Str_Component='Feed'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"a/2\",\"lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "\n",
    "Str_Name='bottom'\n",
    "Str_Component='Bottom'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "            '.Zrange \"-ts-tm\",\"-ts\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "\n",
    "Str_Name='sub'\n",
    "Str_Component='Sub'\n",
    "Str_Material='material1'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "            '.Zrange \"-ts\",\"0\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "#建模结束\n",
    "\n",
    "sCommand = 'Plot.ZoomToStructure'\n",
    "modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "#端口设置，采用的方法和在CST里面选中一个面然后设置端口是一样的操作，这里完全复现\n",
    "#端口1\n",
    "sCommand = 'Pick.PickFaceFromId \"Feed:line1\",4'\n",
    "modeler.add_to_history('pick face', sCommand)\n",
    "sCommand = ['With Port',\n",
    "            '.Reset',\n",
    "            '.PortNumber 1',\n",
    "            '.Label  \"\"',\n",
    "            '.NumberOfModes 1',\n",
    "            '.AdjustPolarization \"False\"',\n",
    "            '.PolarizationAngle 0.0',\n",
    "            '.ReferencePlaneDistance 0',\n",
    "            '.TextSize 50',\n",
    "            '.TextMaxLimit 0',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.Orientation \"positive\"',\n",
    "            '.PortOnBound \"False\"',\n",
    "            '.ClipPickedPortToBound \"False\"',\n",
    "            '.Xrange \"-lx/2\",\"-lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "            '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "            '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "            '.SingleEnded \"False\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)     \n",
    "modeler.add_to_history('define port1', sCommand)\n",
    "\n",
    "#端口2\n",
    "sCommand = 'Pick.PickFaceFromId \"Feed:line2\",6'\n",
    "modeler.add_to_history('pick face', sCommand)\n",
    "sCommand = ['With Port',\n",
    "            '.Reset',\n",
    "            '.PortNumber 2',\n",
    "            '.Label  \"\"',\n",
    "            '.NumberOfModes 1',\n",
    "            '.AdjustPolarization \"False\"',\n",
    "            '.PolarizationAngle 0.0',\n",
    "            '.ReferencePlaneDistance 0',\n",
    "            '.TextSize 50',\n",
    "            '.TextMaxLimit 0',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.Orientation \"positive\"',\n",
    "            '.PortOnBound \"False\"',\n",
    "            '.ClipPickedPortToBound \"False\"',\n",
    "            '.Xrange \"lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "            '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "            '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "            '.SingleEnded \"False\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)     \n",
    "modeler.add_to_history('define port2', sCommand)\n",
    "#端口设置结束\n",
    "\n",
    "#设置远场方向图的Monitor\n",
    "sCommand = ['With Monitor',\n",
    "            '.Reset',\n",
    "            '.Domain \"Frequency\"',\n",
    "            '.FieldType \"Farfield\"',\n",
    "            '.ExportFarfieldSource \"False\"',\n",
    "            '.UseSubvolume \"False\"',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.SetSubvolume \"50\", \"50\", \"-0.73\", \"0.73\", \"0\", \"0.035\"',\n",
    "            '.SetSubvolumeOffset \"10\", \"10\", \"10\", \"10\", \"10\", \"10\" ',\n",
    "            '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "            '.SetSubvolumeOffsetType \"FractionOfWavelength\" ',\n",
    "            '.EnableNearfieldCalculation \"True\" ',\n",
    "            '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.05),\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "#设置远场方向图的Monitor结束\n",
    "\n",
    "#仿真开始\n",
    "modeler. run_solver()\n",
    "#仿真结束\n",
    "\n",
    "mws.save(fullname)#保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c:\\Reaserch\\Code\\CEM\\AntennaGPT\\code\\Patch_Antenna.cst\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#!/usr/bin/env python3\n",
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "@ccly\n",
    "\"\"\"\n",
    "import os\n",
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append(r\"C:\\Reaserch\\CSTStudioSuite2021\\AMD64\\python_cst_libraries\")\n",
    "import cst.interface\n",
    "path = os.getcwd()#获取当前py文件所在文件夹\n",
    "filename = 'Patch_Antenna.cst'\n",
    "fullname = os.path.join(path,filename)\n",
    "print(fullname)\n",
    "\n",
    "cst = cst.interface.DesignEnvironment()\n",
    "cst.set_quiet_mode(False)\n",
    "mws = cst.new_mws()\n",
    "mws.save(fullname)\n",
    "modeler = mws.modeler\n",
    "#贴片天线建模基本参数\n",
    "a = 38.6 #贴片长\n",
    "b = 38 #贴片宽\n",
    "w = 1.46 #馈线宽，100欧姆传输线\n",
    "l = 40 #馈线长\n",
    "lx = 100 #基板长\n",
    "ly = 100 #基板宽\n",
    "ts = 2 #基板厚\n",
    "tm = 0.035 #金属层厚\n",
    "Frq = [2,10] #工作频率，单位：GHz\n",
    "\n",
    "#在CST中加入结构参数，方便后续手动在CST文件中进行操作\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"a\", \"%f\")' % a)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"b\", \"%f\")' % b)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"w\", \"%f\")' % w)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"l\", \"%f\")' % l)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"lx\", \"%f\")' % lx)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ly\", \"%f\")' % ly)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ts\", \"%f\")' % ts)\n",
    "modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"tm\", \"%f\")' % tm)\n",
    "#建模基本参数设置结束\n",
    "line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "#全局单位初始化\n",
    "sCommand = ['With Units',\n",
    "            '.Geometry \"mm\"',\n",
    "            '.Frequency \"ghz\"',\n",
    "            '.Time \"ns\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define units', sCommand)\n",
    "#全局单位初始化结束\n",
    "\n",
    "#工作频率设置\n",
    "sCommand = 'Solver.FrequencyRange \"%f\",\"%f\"'  % (Frq[0],Frq[1])\n",
    "modeler.add_to_history('define frequency range', sCommand)\n",
    "#工作频率设置结束\n",
    "\n",
    "#背景材料设置\n",
    "sCommand = ['With Background',\n",
    "            '.ResetBackground',\n",
    "            '.Type \"Normal\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define background', sCommand)\n",
    "#背景材料设置结束\n",
    "\n",
    "#边界条件设置。\n",
    "sCommand = ['With Boundary',\n",
    "            '.Xmin \"expanded open\"',\n",
    "            '.Xmax \"expanded open\"',\n",
    "            '.Ymin \"expanded open\"',\n",
    "            '.Ymax \"expanded open\"',\n",
    "            '.Zmin \"expanded open\"',\n",
    "            '.Zmax \"expanded open\"',\n",
    "            '.Xsymmetry \"none\"',\n",
    "            '.Ysymmetry \"none\"',\n",
    "            '.Zsymmetry \"none\"',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define boundary', sCommand)\n",
    "#边界条件设置结束\n",
    "\n",
    "#新建所需介质材料\n",
    "er1 = 2.65\n",
    "sCommand = ['With Material',\n",
    "            '.Reset',\n",
    "            '.Name \"material1\"',\n",
    "            '.FrqType \"all\"',\n",
    "            '.Type \"Normal\"',\n",
    "            '.Epsilon %f' %er1,\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define material: material265', sCommand)\n",
    "#新建所需介质材料结束\n",
    "\n",
    "#使Bounding Box显示\n",
    "sCommand = 'Plot.DrawBox \"True\"'\n",
    "modeler.add_to_history('switch bounding box', sCommand)\n",
    "#使Bounding Box显示结束"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "#建模开始\n",
    "#调用Brick对象开始\n",
    "Str_Name='patch'\n",
    "Str_Component='Patch'\n",
    "Str_Material='PEC'\n",
    "#以下这一串可以写成函数\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-a/2\",\"a/2\"',\n",
    "            '.Yrange \"-b/2\",\"b/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "#以上这一串可以写成函数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand = 'Component.Delete \"component1\"'\n",
    "modeler.add_to_history('pick face', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand = 'Component.Delete \"Patch\"'\n",
    "modeler.add_to_history('pick face', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导入obj\n",
    "file_path=r\"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\data100.obj\"\n",
    "Str_Name='patch'\n",
    "Str_Component='Patch'\n",
    "sCommand = ['With OBJ',\n",
    "            '.Reset',\n",
    "            '.FileName (\"%s\")' % file_path,\n",
    "            '.Name (\"test\")',\n",
    "            '.Layer (\"Patch\")',\n",
    "            '.ScaleFactor (\"1\")',\n",
    "            '.ImportToActiveCoordinateSystem (False)',\n",
    "            '.Read',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('Import OBJ File', sCommand)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# pick一个face\n",
    "sCommand = 'Pick.PickFaceFromId \"Patch:test\",0'\n",
    "modeler.add_to_history('pick face', sCommand)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#SParameters.ExportTouchstoneFormatted(touchstoneFilePath, \"DB\", 50, \"all\")\n",
    "# pick一个face\n",
    "# sCommand = 'Pick.PickFaceFromId \"Patch:test\",0'\n",
    "# sCommand = 'SParameters.ExportTouchstoneFormatted \"C:\\\\Reaserch\\\\Code\\\\CEM\\\\AntennaGPT\\\\code\\\\Patch_Antenna\\\\test.s2p\",\"DB\"'\n",
    "# modeler.add_to_history('export', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "Str_Name='patch'\n",
    "Str_Component='Patch'\n",
    "sCommand = ['With Extrude',\n",
    "            '.Reset',\n",
    "            '.Name (\"solid2\")',\n",
    "            '.Component (\"component1\")',\n",
    "            '.Material (\"PEC\")',\n",
    "            '.Mode (\"Picks\")',\n",
    "            '.Height (\"tm\")',\n",
    "            '.Taper (5)',\n",
    "            '.UsePicksForHeight (False)',\n",
    "            '.DeleteBaseFaceSolid (False)',\n",
    "            '.ClearPickedFace (True)',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('Extrude', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "sCommand = 'Plot.ZoomToStructure'\n",
    "modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "Str_Name='line1'\n",
    "Str_Component='Feed'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"-a/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "Str_Name='line2'\n",
    "Str_Component='Feed'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"a/2\",\"lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Str_Name='bottom'\n",
    "Str_Component='Bottom'\n",
    "Str_Material='PEC'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "            '.Zrange \"-ts-tm\",\"-ts\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "Str_Name='sub'\n",
    "Str_Component='Sub'\n",
    "Str_Material='material1'\n",
    "sCommand = ['With Brick',\n",
    "            '.Reset',\n",
    "            '.Name \"%s\"' % Str_Name,\n",
    "            '.Component \"%s\"' % Str_Component,\n",
    "            '.Material \"%s\"' % Str_Material,\n",
    "            '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "            '.Zrange \"-ts\",\"0\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "#建模结束\n",
    "\n",
    "sCommand = 'Plot.ZoomToStructure'\n",
    "modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "#端口设置，采用的方法和在CST里面选中一个面然后设置端口是一样的操作，这里完全复现\n",
    "#端口1\n",
    "sCommand = 'Pick.PickFaceFromId \"Feed:line1\",4'\n",
    "modeler.add_to_history('pick face', sCommand)\n",
    "sCommand = ['With Port',\n",
    "            '.Reset',\n",
    "            '.PortNumber 1',\n",
    "            '.Label  \"\"',\n",
    "            '.NumberOfModes 1',\n",
    "            '.AdjustPolarization \"False\"',\n",
    "            '.PolarizationAngle 0.0',\n",
    "            '.ReferencePlaneDistance 0',\n",
    "            '.TextSize 50',\n",
    "            '.TextMaxLimit 0',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.Orientation \"positive\"',\n",
    "            '.PortOnBound \"False\"',\n",
    "            '.ClipPickedPortToBound \"False\"',\n",
    "            '.Xrange \"-lx/2\",\"-lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "            '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "            '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "            '.SingleEnded \"False\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)     \n",
    "modeler.add_to_history('define port1', sCommand)\n",
    "\n",
    "#端口2\n",
    "sCommand = 'Pick.PickFaceFromId \"Feed:line2\",6'\n",
    "modeler.add_to_history('pick face', sCommand)\n",
    "sCommand = ['With Port',\n",
    "            '.Reset',\n",
    "            '.PortNumber 2',\n",
    "            '.Label  \"\"',\n",
    "            '.NumberOfModes 1',\n",
    "            '.AdjustPolarization \"False\"',\n",
    "            '.PolarizationAngle 0.0',\n",
    "            '.ReferencePlaneDistance 0',\n",
    "            '.TextSize 50',\n",
    "            '.TextMaxLimit 0',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.Orientation \"positive\"',\n",
    "            '.PortOnBound \"False\"',\n",
    "            '.ClipPickedPortToBound \"False\"',\n",
    "            '.Xrange \"lx/2\",\"lx/2\"',\n",
    "            '.Yrange \"-w/2\",\"w/2\"',\n",
    "            '.Zrange \"0\",\"tm\"',\n",
    "            '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "            '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "            '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "            '.SingleEnded \"False\"',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)     \n",
    "modeler.add_to_history('define port2', sCommand)\n",
    "#端口设置结束\n",
    "\n",
    "#设置远场方向图的Monitor\n",
    "sCommand = ['With Monitor',\n",
    "            '.Reset',\n",
    "            '.Domain \"Frequency\"',\n",
    "            '.FieldType \"Farfield\"',\n",
    "            '.ExportFarfieldSource \"False\"',\n",
    "            '.UseSubvolume \"False\"',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.SetSubvolume \"50\", \"50\", \"-0.73\", \"0.73\", \"0\", \"0.035\"',\n",
    "            '.SetSubvolumeOffset \"10\", \"10\", \"10\", \"10\", \"10\", \"10\" ',\n",
    "            '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "            '.SetSubvolumeOffsetType \"FractionOfWavelength\" ',\n",
    "            '.EnableNearfieldCalculation \"True\" ',\n",
    "            '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.05),\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "#设置远场方向图的Monitor结束\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#仿真开始\n",
    "modeler. run_solver()\n",
    "#仿真结束\n",
    "\n",
    "mws.save(fullname)#保存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 导出\n",
    "sCommand = ['With TOUCHSTONE',\n",
    "            '.Reset',\n",
    "            '.FileName (\".\\example3\")',\n",
    "            '.Impedance (50)',\n",
    "            '.FrequencyRange (\"Full\")',\n",
    "            '.Renormalize (True)',\n",
    "            '.UseARResults (False)',\n",
    "            '.SetNSamples (1001)',\n",
    "            '.Format (\"DB\")',\n",
    "            '.Write',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('Export', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Frq = [2,10]\n",
    "#设置远场方向图的Monitor\n",
    "sCommand = ['With Monitor',\n",
    "            '.Reset',\n",
    "            '.Domain \"Frequency\"',\n",
    "            '.FieldType \"Farfield\"',\n",
    "            '.ExportFarfieldSource \"False\"',\n",
    "            '.UseSubvolume \"False\"',\n",
    "            '.Coordinates \"Picks\"',\n",
    "            '.SetSubvolume \"50\", \"50\", \"-0.73\", \"0.73\", \"0\", \"0.035\"',\n",
    "            '.SetSubvolumeOffset \"10\", \"10\", \"10\", \"10\", \"10\", \"10\" ',\n",
    "            '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "            '.SetSubvolumeOffsetType \"FractionOfWavelength\" ',\n",
    "            '.EnableNearfieldCalculation \"True\" ',\n",
    "            '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.05),\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "#设置远场方向图的Monitor结束"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# SelectTreeItem (\"2D/3D Results\\E-Field\\e1\")\n",
    "\n",
    " \n",
    "\n",
    "# With ASCIIExport\n",
    "\n",
    "#     .Reset\n",
    "\n",
    "#     .FileName (\".\\example.txt\")\n",
    "\n",
    "#     .Mode (\"FixedNumber\")\n",
    "\n",
    "#     .StepX (12)\n",
    "\n",
    "#     .StepY (12)\n",
    "\n",
    "#     .StepZ (8)\n",
    "\n",
    "#     .Execute\n",
    "\n",
    "# End With\n",
    "\n",
    "#设置远场方向图的Monitor\n",
    "\n",
    "sCommand = ['SelectTreeItem (\"Farfields\\farfield（f=6）[1]\")',\n",
    "            'With ASCIIExport',\n",
    "            '.Reset',\n",
    "            '.FileName (\"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\example.txt\")',\n",
    "            '.Mode (\"FixedNumber\")',\n",
    "            # '.StepX (12)',\n",
    "            # '.StepY (12)',\n",
    "            # '.StepZ (8)',\n",
    "            '.Execute',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "#设置远场方向图的Monitor结束"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c:\\Reaserch\\Code\\CEM\\AntennaGPT\\code\\Patch_Antenna.cst\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 63%|██████▎   | 317/500 [00:00<00:00, 1628.57it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OBJ 文件已生成：../data/gap/data0.obj\n",
      "OBJ 文件已生成：../data/gap/data1.obj\n",
      "OBJ 文件已生成：../data/gap/data2.obj\n",
      "OBJ 文件已生成：../data/gap/data3.obj\n",
      "OBJ 文件已生成：../data/gap/data4.obj\n",
      "OBJ 文件已生成：../data/gap/data5.obj\n",
      "OBJ 文件已生成：../data/gap/data6.obj\n",
      "OBJ 文件已生成：../data/gap/data7.obj\n",
      "OBJ 文件已生成：../data/gap/data8.obj\n",
      "OBJ 文件已生成：../data/gap/data9.obj\n",
      "OBJ 文件已生成：../data/gap/data10.obj\n",
      "OBJ 文件已生成：../data/gap/data11.obj\n",
      "OBJ 文件已生成：../data/gap/data12.obj\n",
      "OBJ 文件已生成：../data/gap/data13.obj\n",
      "OBJ 文件已生成：../data/gap/data14.obj\n",
      "OBJ 文件已生成：../data/gap/data15.obj\n",
      "OBJ 文件已生成：../data/gap/data16.obj\n",
      "OBJ 文件已生成：../data/gap/data17.obj\n",
      "OBJ 文件已生成：../data/gap/data18.obj\n",
      "OBJ 文件已生成：../data/gap/data19.obj\n",
      "OBJ 文件已生成：../data/gap/data20.obj\n",
      "OBJ 文件已生成：../data/gap/data21.obj\n",
      "OBJ 文件已生成：../data/gap/data22.obj\n",
      "OBJ 文件已生成：../data/gap/data23.obj\n",
      "OBJ 文件已生成：../data/gap/data24.obj\n",
      "OBJ 文件已生成：../data/gap/data25.obj\n",
      "OBJ 文件已生成：../data/gap/data26.obj\n",
      "OBJ 文件已生成：../data/gap/data27.obj\n",
      "OBJ 文件已生成：../data/gap/data28.obj\n",
      "OBJ 文件已生成：../data/gap/data29.obj\n",
      "OBJ 文件已生成：../data/gap/data30.obj\n",
      "OBJ 文件已生成：../data/gap/data31.obj\n",
      "OBJ 文件已生成：../data/gap/data32.obj\n",
      "OBJ 文件已生成：../data/gap/data33.obj\n",
      "OBJ 文件已生成：../data/gap/data34.obj\n",
      "OBJ 文件已生成：../data/gap/data35.obj\n",
      "OBJ 文件已生成：../data/gap/data36.obj\n",
      "OBJ 文件已生成：../data/gap/data37.obj\n",
      "OBJ 文件已生成：../data/gap/data38.obj\n",
      "OBJ 文件已生成：../data/gap/data39.obj\n",
      "OBJ 文件已生成：../data/gap/data40.obj\n",
      "OBJ 文件已生成：../data/gap/data41.obj\n",
      "OBJ 文件已生成：../data/gap/data42.obj\n",
      "OBJ 文件已生成：../data/gap/data43.obj\n",
      "OBJ 文件已生成：../data/gap/data44.obj\n",
      "OBJ 文件已生成：../data/gap/data45.obj\n",
      "OBJ 文件已生成：../data/gap/data46.obj\n",
      "OBJ 文件已生成：../data/gap/data47.obj\n",
      "OBJ 文件已生成：../data/gap/data48.obj\n",
      "OBJ 文件已生成：../data/gap/data49.obj\n",
      "OBJ 文件已生成：../data/gap/data50.obj\n",
      "OBJ 文件已生成：../data/gap/data51.obj\n",
      "OBJ 文件已生成：../data/gap/data52.obj\n",
      "OBJ 文件已生成：../data/gap/data53.obj\n",
      "OBJ 文件已生成：../data/gap/data54.obj\n",
      "OBJ 文件已生成：../data/gap/data55.obj\n",
      "OBJ 文件已生成：../data/gap/data56.obj\n",
      "OBJ 文件已生成：../data/gap/data57.obj\n",
      "OBJ 文件已生成：../data/gap/data58.obj\n",
      "OBJ 文件已生成：../data/gap/data59.obj\n",
      "OBJ 文件已生成：../data/gap/data60.obj\n",
      "OBJ 文件已生成：../data/gap/data61.obj\n",
      "OBJ 文件已生成：../data/gap/data62.obj\n",
      "OBJ 文件已生成：../data/gap/data63.obj\n",
      "OBJ 文件已生成：../data/gap/data64.obj\n",
      "OBJ 文件已生成：../data/gap/data65.obj\n",
      "OBJ 文件已生成：../data/gap/data66.obj\n",
      "OBJ 文件已生成：../data/gap/data67.obj\n",
      "OBJ 文件已生成：../data/gap/data68.obj\n",
      "OBJ 文件已生成：../data/gap/data69.obj\n",
      "OBJ 文件已生成：../data/gap/data70.obj\n",
      "OBJ 文件已生成：../data/gap/data71.obj\n",
      "OBJ 文件已生成：../data/gap/data72.obj\n",
      "OBJ 文件已生成：../data/gap/data73.obj\n",
      "OBJ 文件已生成：../data/gap/data74.obj\n",
      "OBJ 文件已生成：../data/gap/data75.obj\n",
      "OBJ 文件已生成：../data/gap/data76.obj\n",
      "OBJ 文件已生成：../data/gap/data77.obj\n",
      "OBJ 文件已生成：../data/gap/data78.obj\n",
      "OBJ 文件已生成：../data/gap/data79.obj\n",
      "OBJ 文件已生成：../data/gap/data80.obj\n",
      "OBJ 文件已生成：../data/gap/data81.obj\n",
      "OBJ 文件已生成：../data/gap/data82.obj\n",
      "OBJ 文件已生成：../data/gap/data83.obj\n",
      "OBJ 文件已生成：../data/gap/data84.obj\n",
      "OBJ 文件已生成：../data/gap/data85.obj\n",
      "OBJ 文件已生成：../data/gap/data86.obj\n",
      "OBJ 文件已生成：../data/gap/data87.obj\n",
      "OBJ 文件已生成：../data/gap/data88.obj\n",
      "OBJ 文件已生成：../data/gap/data89.obj\n",
      "OBJ 文件已生成：../data/gap/data90.obj\n",
      "OBJ 文件已生成：../data/gap/data91.obj\n",
      "OBJ 文件已生成：../data/gap/data92.obj\n",
      "OBJ 文件已生成：../data/gap/data93.obj\n",
      "OBJ 文件已生成：../data/gap/data94.obj\n",
      "OBJ 文件已生成：../data/gap/data95.obj\n",
      "OBJ 文件已生成：../data/gap/data96.obj\n",
      "OBJ 文件已生成：../data/gap/data97.obj\n",
      "OBJ 文件已生成：../data/gap/data98.obj\n",
      "OBJ 文件已生成：../data/gap/data99.obj\n",
      "OBJ 文件已生成：../data/gap/data100.obj\n",
      "OBJ 文件已生成：../data/gap/data101.obj\n",
      "OBJ 文件已生成：../data/gap/data102.obj\n",
      "OBJ 文件已生成：../data/gap/data103.obj\n",
      "OBJ 文件已生成：../data/gap/data104.obj\n",
      "OBJ 文件已生成：../data/gap/data105.obj\n",
      "OBJ 文件已生成：../data/gap/data106.obj\n",
      "OBJ 文件已生成：../data/gap/data107.obj\n",
      "OBJ 文件已生成：../data/gap/data108.obj\n",
      "OBJ 文件已生成：../data/gap/data109.obj\n",
      "OBJ 文件已生成：../data/gap/data110.obj\n",
      "OBJ 文件已生成：../data/gap/data111.obj\n",
      "OBJ 文件已生成：../data/gap/data112.obj\n",
      "OBJ 文件已生成：../data/gap/data113.obj\n",
      "OBJ 文件已生成：../data/gap/data114.obj\n",
      "OBJ 文件已生成：../data/gap/data115.obj\n",
      "OBJ 文件已生成：../data/gap/data116.obj\n",
      "OBJ 文件已生成：../data/gap/data117.obj\n",
      "OBJ 文件已生成：../data/gap/data118.obj\n",
      "OBJ 文件已生成：../data/gap/data119.obj\n",
      "OBJ 文件已生成：../data/gap/data120.obj\n",
      "OBJ 文件已生成：../data/gap/data121.obj\n",
      "OBJ 文件已生成：../data/gap/data122.obj\n",
      "OBJ 文件已生成：../data/gap/data123.obj\n",
      "OBJ 文件已生成：../data/gap/data124.obj\n",
      "OBJ 文件已生成：../data/gap/data125.obj\n",
      "OBJ 文件已生成：../data/gap/data126.obj\n",
      "OBJ 文件已生成：../data/gap/data127.obj\n",
      "OBJ 文件已生成：../data/gap/data128.obj\n",
      "OBJ 文件已生成：../data/gap/data129.obj\n",
      "OBJ 文件已生成：../data/gap/data130.obj\n",
      "OBJ 文件已生成：../data/gap/data131.obj\n",
      "OBJ 文件已生成：../data/gap/data132.obj\n",
      "OBJ 文件已生成：../data/gap/data133.obj\n",
      "OBJ 文件已生成：../data/gap/data134.obj\n",
      "OBJ 文件已生成：../data/gap/data135.obj\n",
      "OBJ 文件已生成：../data/gap/data136.obj\n",
      "OBJ 文件已生成：../data/gap/data137.obj\n",
      "OBJ 文件已生成：../data/gap/data138.obj\n",
      "OBJ 文件已生成：../data/gap/data139.obj\n",
      "OBJ 文件已生成：../data/gap/data140.obj\n",
      "OBJ 文件已生成：../data/gap/data141.obj\n",
      "OBJ 文件已生成：../data/gap/data142.obj\n",
      "OBJ 文件已生成：../data/gap/data143.obj\n",
      "OBJ 文件已生成：../data/gap/data144.obj\n",
      "OBJ 文件已生成：../data/gap/data145.obj\n",
      "OBJ 文件已生成：../data/gap/data146.obj\n",
      "OBJ 文件已生成：../data/gap/data147.obj\n",
      "OBJ 文件已生成：../data/gap/data148.obj\n",
      "OBJ 文件已生成：../data/gap/data149.obj\n",
      "OBJ 文件已生成：../data/gap/data150.obj\n",
      "OBJ 文件已生成：../data/gap/data151.obj\n",
      "OBJ 文件已生成：../data/gap/data152.obj\n",
      "OBJ 文件已生成：../data/gap/data153.obj\n",
      "OBJ 文件已生成：../data/gap/data154.obj\n",
      "OBJ 文件已生成：../data/gap/data155.obj\n",
      "OBJ 文件已生成：../data/gap/data156.obj\n",
      "OBJ 文件已生成：../data/gap/data157.obj\n",
      "OBJ 文件已生成：../data/gap/data158.obj\n",
      "OBJ 文件已生成：../data/gap/data159.obj\n",
      "OBJ 文件已生成：../data/gap/data160.obj\n",
      "OBJ 文件已生成：../data/gap/data161.obj\n",
      "OBJ 文件已生成：../data/gap/data162.obj\n",
      "OBJ 文件已生成：../data/gap/data163.obj\n",
      "OBJ 文件已生成：../data/gap/data164.obj\n",
      "OBJ 文件已生成：../data/gap/data165.obj\n",
      "OBJ 文件已生成：../data/gap/data166.obj\n",
      "OBJ 文件已生成：../data/gap/data167.obj\n",
      "OBJ 文件已生成：../data/gap/data168.obj\n",
      "OBJ 文件已生成：../data/gap/data169.obj\n",
      "OBJ 文件已生成：../data/gap/data170.obj\n",
      "OBJ 文件已生成：../data/gap/data171.obj\n",
      "OBJ 文件已生成：../data/gap/data172.obj\n",
      "OBJ 文件已生成：../data/gap/data173.obj\n",
      "OBJ 文件已生成：../data/gap/data174.obj\n",
      "OBJ 文件已生成：../data/gap/data175.obj\n",
      "OBJ 文件已生成：../data/gap/data176.obj\n",
      "OBJ 文件已生成：../data/gap/data177.obj\n",
      "OBJ 文件已生成：../data/gap/data178.obj\n",
      "OBJ 文件已生成：../data/gap/data179.obj\n",
      "OBJ 文件已生成：../data/gap/data180.obj\n",
      "OBJ 文件已生成：../data/gap/data181.obj\n",
      "OBJ 文件已生成：../data/gap/data182.obj\n",
      "OBJ 文件已生成：../data/gap/data183.obj\n",
      "OBJ 文件已生成：../data/gap/data184.obj\n",
      "OBJ 文件已生成：../data/gap/data185.obj\n",
      "OBJ 文件已生成：../data/gap/data186.obj\n",
      "OBJ 文件已生成：../data/gap/data187.obj\n",
      "OBJ 文件已生成：../data/gap/data188.obj\n",
      "OBJ 文件已生成：../data/gap/data189.obj\n",
      "OBJ 文件已生成：../data/gap/data190.obj\n",
      "OBJ 文件已生成：../data/gap/data191.obj\n",
      "OBJ 文件已生成：../data/gap/data192.obj\n",
      "OBJ 文件已生成：../data/gap/data193.obj\n",
      "OBJ 文件已生成：../data/gap/data194.obj\n",
      "OBJ 文件已生成：../data/gap/data195.obj\n",
      "OBJ 文件已生成：../data/gap/data196.obj\n",
      "OBJ 文件已生成：../data/gap/data197.obj\n",
      "OBJ 文件已生成：../data/gap/data198.obj\n",
      "OBJ 文件已生成：../data/gap/data199.obj\n",
      "OBJ 文件已生成：../data/gap/data200.obj\n",
      "OBJ 文件已生成：../data/gap/data201.obj\n",
      "OBJ 文件已生成：../data/gap/data202.obj\n",
      "OBJ 文件已生成：../data/gap/data203.obj\n",
      "OBJ 文件已生成：../data/gap/data204.obj\n",
      "OBJ 文件已生成：../data/gap/data205.obj\n",
      "OBJ 文件已生成：../data/gap/data206.obj\n",
      "OBJ 文件已生成：../data/gap/data207.obj\n",
      "OBJ 文件已生成：../data/gap/data208.obj\n",
      "OBJ 文件已生成：../data/gap/data209.obj\n",
      "OBJ 文件已生成：../data/gap/data210.obj\n",
      "OBJ 文件已生成：../data/gap/data211.obj\n",
      "OBJ 文件已生成：../data/gap/data212.obj\n",
      "OBJ 文件已生成：../data/gap/data213.obj\n",
      "OBJ 文件已生成：../data/gap/data214.obj\n",
      "OBJ 文件已生成：../data/gap/data215.obj\n",
      "OBJ 文件已生成：../data/gap/data216.obj\n",
      "OBJ 文件已生成：../data/gap/data217.obj\n",
      "OBJ 文件已生成：../data/gap/data218.obj\n",
      "OBJ 文件已生成：../data/gap/data219.obj\n",
      "OBJ 文件已生成：../data/gap/data220.obj\n",
      "OBJ 文件已生成：../data/gap/data221.obj\n",
      "OBJ 文件已生成：../data/gap/data222.obj\n",
      "OBJ 文件已生成：../data/gap/data223.obj\n",
      "OBJ 文件已生成：../data/gap/data224.obj\n",
      "OBJ 文件已生成：../data/gap/data225.obj\n",
      "OBJ 文件已生成：../data/gap/data226.obj\n",
      "OBJ 文件已生成：../data/gap/data227.obj\n",
      "OBJ 文件已生成：../data/gap/data228.obj\n",
      "OBJ 文件已生成：../data/gap/data229.obj\n",
      "OBJ 文件已生成：../data/gap/data230.obj\n",
      "OBJ 文件已生成：../data/gap/data231.obj\n",
      "OBJ 文件已生成：../data/gap/data232.obj\n",
      "OBJ 文件已生成：../data/gap/data233.obj\n",
      "OBJ 文件已生成：../data/gap/data234.obj\n",
      "OBJ 文件已生成：../data/gap/data235.obj\n",
      "OBJ 文件已生成：../data/gap/data236.obj\n",
      "OBJ 文件已生成：../data/gap/data237.obj\n",
      "OBJ 文件已生成：../data/gap/data238.obj\n",
      "OBJ 文件已生成：../data/gap/data239.obj\n",
      "OBJ 文件已生成：../data/gap/data240.obj\n",
      "OBJ 文件已生成：../data/gap/data241.obj\n",
      "OBJ 文件已生成：../data/gap/data242.obj\n",
      "OBJ 文件已生成：../data/gap/data243.obj\n",
      "OBJ 文件已生成：../data/gap/data244.obj\n",
      "OBJ 文件已生成：../data/gap/data245.obj\n",
      "OBJ 文件已生成：../data/gap/data246.obj\n",
      "OBJ 文件已生成：../data/gap/data247.obj\n",
      "OBJ 文件已生成：../data/gap/data248.obj\n",
      "OBJ 文件已生成：../data/gap/data249.obj\n",
      "OBJ 文件已生成：../data/gap/data250.obj\n",
      "OBJ 文件已生成：../data/gap/data251.obj\n",
      "OBJ 文件已生成：../data/gap/data252.obj\n",
      "OBJ 文件已生成：../data/gap/data253.obj\n",
      "OBJ 文件已生成：../data/gap/data254.obj\n",
      "OBJ 文件已生成：../data/gap/data255.obj\n",
      "OBJ 文件已生成：../data/gap/data256.obj\n",
      "OBJ 文件已生成：../data/gap/data257.obj\n",
      "OBJ 文件已生成：../data/gap/data258.obj\n",
      "OBJ 文件已生成：../data/gap/data259.obj\n",
      "OBJ 文件已生成：../data/gap/data260.obj\n",
      "OBJ 文件已生成：../data/gap/data261.obj\n",
      "OBJ 文件已生成：../data/gap/data262.obj\n",
      "OBJ 文件已生成：../data/gap/data263.obj\n",
      "OBJ 文件已生成：../data/gap/data264.obj\n",
      "OBJ 文件已生成：../data/gap/data265.obj\n",
      "OBJ 文件已生成：../data/gap/data266.obj\n",
      "OBJ 文件已生成：../data/gap/data267.obj\n",
      "OBJ 文件已生成：../data/gap/data268.obj\n",
      "OBJ 文件已生成：../data/gap/data269.obj\n",
      "OBJ 文件已生成：../data/gap/data270.obj\n",
      "OBJ 文件已生成：../data/gap/data271.obj\n",
      "OBJ 文件已生成：../data/gap/data272.obj\n",
      "OBJ 文件已生成：../data/gap/data273.obj\n",
      "OBJ 文件已生成：../data/gap/data274.obj\n",
      "OBJ 文件已生成：../data/gap/data275.obj\n",
      "OBJ 文件已生成：../data/gap/data276.obj\n",
      "OBJ 文件已生成：../data/gap/data277.obj\n",
      "OBJ 文件已生成：../data/gap/data278.obj\n",
      "OBJ 文件已生成：../data/gap/data279.obj\n",
      "OBJ 文件已生成：../data/gap/data280.obj\n",
      "OBJ 文件已生成：../data/gap/data281.obj\n",
      "OBJ 文件已生成：../data/gap/data282.obj\n",
      "OBJ 文件已生成：../data/gap/data283.obj\n",
      "OBJ 文件已生成：../data/gap/data284.obj\n",
      "OBJ 文件已生成：../data/gap/data285.obj\n",
      "OBJ 文件已生成：../data/gap/data286.obj\n",
      "OBJ 文件已生成：../data/gap/data287.obj\n",
      "OBJ 文件已生成：../data/gap/data288.obj\n",
      "OBJ 文件已生成：../data/gap/data289.obj\n",
      "OBJ 文件已生成：../data/gap/data290.obj\n",
      "OBJ 文件已生成：../data/gap/data291.obj\n",
      "OBJ 文件已生成：../data/gap/data292.obj\n",
      "OBJ 文件已生成：../data/gap/data293.obj\n",
      "OBJ 文件已生成：../data/gap/data294.obj\n",
      "OBJ 文件已生成：../data/gap/data295.obj\n",
      "OBJ 文件已生成：../data/gap/data296.obj\n",
      "OBJ 文件已生成：../data/gap/data297.obj\n",
      "OBJ 文件已生成：../data/gap/data298.obj\n",
      "OBJ 文件已生成：../data/gap/data299.obj\n",
      "OBJ 文件已生成：../data/gap/data300.obj\n",
      "OBJ 文件已生成：../data/gap/data301.obj\n",
      "OBJ 文件已生成：../data/gap/data302.obj\n",
      "OBJ 文件已生成：../data/gap/data303.obj\n",
      "OBJ 文件已生成：../data/gap/data304.obj\n",
      "OBJ 文件已生成：../data/gap/data305.obj\n",
      "OBJ 文件已生成：../data/gap/data306.obj\n",
      "OBJ 文件已生成：../data/gap/data307.obj\n",
      "OBJ 文件已生成：../data/gap/data308.obj\n",
      "OBJ 文件已生成：../data/gap/data309.obj\n",
      "OBJ 文件已生成：../data/gap/data310.obj\n",
      "OBJ 文件已生成：../data/gap/data311.obj\n",
      "OBJ 文件已生成：../data/gap/data312.obj\n",
      "OBJ 文件已生成：../data/gap/data313.obj\n",
      "OBJ 文件已生成：../data/gap/data314.obj\n",
      "OBJ 文件已生成：../data/gap/data315.obj\n",
      "OBJ 文件已生成：../data/gap/data316.obj\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 500/500 [00:00<00:00, 1690.83it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OBJ 文件已生成：../data/gap/data317.obj\n",
      "OBJ 文件已生成：../data/gap/data318.obj\n",
      "OBJ 文件已生成：../data/gap/data319.obj\n",
      "OBJ 文件已生成：../data/gap/data320.obj\n",
      "OBJ 文件已生成：../data/gap/data321.obj\n",
      "OBJ 文件已生成：../data/gap/data322.obj\n",
      "OBJ 文件已生成：../data/gap/data323.obj\n",
      "OBJ 文件已生成：../data/gap/data324.obj\n",
      "OBJ 文件已生成：../data/gap/data325.obj\n",
      "OBJ 文件已生成：../data/gap/data326.obj\n",
      "OBJ 文件已生成：../data/gap/data327.obj\n",
      "OBJ 文件已生成：../data/gap/data328.obj\n",
      "OBJ 文件已生成：../data/gap/data329.obj\n",
      "OBJ 文件已生成：../data/gap/data330.obj\n",
      "OBJ 文件已生成：../data/gap/data331.obj\n",
      "OBJ 文件已生成：../data/gap/data332.obj\n",
      "OBJ 文件已生成：../data/gap/data333.obj\n",
      "OBJ 文件已生成：../data/gap/data334.obj\n",
      "OBJ 文件已生成：../data/gap/data335.obj\n",
      "OBJ 文件已生成：../data/gap/data336.obj\n",
      "OBJ 文件已生成：../data/gap/data337.obj\n",
      "OBJ 文件已生成：../data/gap/data338.obj\n",
      "OBJ 文件已生成：../data/gap/data339.obj\n",
      "OBJ 文件已生成：../data/gap/data340.obj\n",
      "OBJ 文件已生成：../data/gap/data341.obj\n",
      "OBJ 文件已生成：../data/gap/data342.obj\n",
      "OBJ 文件已生成：../data/gap/data343.obj\n",
      "OBJ 文件已生成：../data/gap/data344.obj\n",
      "OBJ 文件已生成：../data/gap/data345.obj\n",
      "OBJ 文件已生成：../data/gap/data346.obj\n",
      "OBJ 文件已生成：../data/gap/data347.obj\n",
      "OBJ 文件已生成：../data/gap/data348.obj\n",
      "OBJ 文件已生成：../data/gap/data349.obj\n",
      "OBJ 文件已生成：../data/gap/data350.obj\n",
      "OBJ 文件已生成：../data/gap/data351.obj\n",
      "OBJ 文件已生成：../data/gap/data352.obj\n",
      "OBJ 文件已生成：../data/gap/data353.obj\n",
      "OBJ 文件已生成：../data/gap/data354.obj\n",
      "OBJ 文件已生成：../data/gap/data355.obj\n",
      "OBJ 文件已生成：../data/gap/data356.obj\n",
      "OBJ 文件已生成：../data/gap/data357.obj\n",
      "OBJ 文件已生成：../data/gap/data358.obj\n",
      "OBJ 文件已生成：../data/gap/data359.obj\n",
      "OBJ 文件已生成：../data/gap/data360.obj\n",
      "OBJ 文件已生成：../data/gap/data361.obj\n",
      "OBJ 文件已生成：../data/gap/data362.obj\n",
      "OBJ 文件已生成：../data/gap/data363.obj\n",
      "OBJ 文件已生成：../data/gap/data364.obj\n",
      "OBJ 文件已生成：../data/gap/data365.obj\n",
      "OBJ 文件已生成：../data/gap/data366.obj\n",
      "OBJ 文件已生成：../data/gap/data367.obj\n",
      "OBJ 文件已生成：../data/gap/data368.obj\n",
      "OBJ 文件已生成：../data/gap/data369.obj\n",
      "OBJ 文件已生成：../data/gap/data370.obj\n",
      "OBJ 文件已生成：../data/gap/data371.obj\n",
      "OBJ 文件已生成：../data/gap/data372.obj\n",
      "OBJ 文件已生成：../data/gap/data373.obj\n",
      "OBJ 文件已生成：../data/gap/data374.obj\n",
      "OBJ 文件已生成：../data/gap/data375.obj\n",
      "OBJ 文件已生成：../data/gap/data376.obj\n",
      "OBJ 文件已生成：../data/gap/data377.obj\n",
      "OBJ 文件已生成：../data/gap/data378.obj\n",
      "OBJ 文件已生成：../data/gap/data379.obj\n",
      "OBJ 文件已生成：../data/gap/data380.obj\n",
      "OBJ 文件已生成：../data/gap/data381.obj\n",
      "OBJ 文件已生成：../data/gap/data382.obj\n",
      "OBJ 文件已生成：../data/gap/data383.obj\n",
      "OBJ 文件已生成：../data/gap/data384.obj\n",
      "OBJ 文件已生成：../data/gap/data385.obj\n",
      "OBJ 文件已生成：../data/gap/data386.obj\n",
      "OBJ 文件已生成：../data/gap/data387.obj\n",
      "OBJ 文件已生成：../data/gap/data388.obj\n",
      "OBJ 文件已生成：../data/gap/data389.obj\n",
      "OBJ 文件已生成：../data/gap/data390.obj\n",
      "OBJ 文件已生成：../data/gap/data391.obj\n",
      "OBJ 文件已生成：../data/gap/data392.obj\n",
      "OBJ 文件已生成：../data/gap/data393.obj\n",
      "OBJ 文件已生成：../data/gap/data394.obj\n",
      "OBJ 文件已生成：../data/gap/data395.obj\n",
      "OBJ 文件已生成：../data/gap/data396.obj\n",
      "OBJ 文件已生成：../data/gap/data397.obj\n",
      "OBJ 文件已生成：../data/gap/data398.obj\n",
      "OBJ 文件已生成：../data/gap/data399.obj\n",
      "OBJ 文件已生成：../data/gap/data400.obj\n",
      "OBJ 文件已生成：../data/gap/data401.obj\n",
      "OBJ 文件已生成：../data/gap/data402.obj\n",
      "OBJ 文件已生成：../data/gap/data403.obj\n",
      "OBJ 文件已生成：../data/gap/data404.obj\n",
      "OBJ 文件已生成：../data/gap/data405.obj\n",
      "OBJ 文件已生成：../data/gap/data406.obj\n",
      "OBJ 文件已生成：../data/gap/data407.obj\n",
      "OBJ 文件已生成：../data/gap/data408.obj\n",
      "OBJ 文件已生成：../data/gap/data409.obj\n",
      "OBJ 文件已生成：../data/gap/data410.obj\n",
      "OBJ 文件已生成：../data/gap/data411.obj\n",
      "OBJ 文件已生成：../data/gap/data412.obj\n",
      "OBJ 文件已生成：../data/gap/data413.obj\n",
      "OBJ 文件已生成：../data/gap/data414.obj\n",
      "OBJ 文件已生成：../data/gap/data415.obj\n",
      "OBJ 文件已生成：../data/gap/data416.obj\n",
      "OBJ 文件已生成：../data/gap/data417.obj\n",
      "OBJ 文件已生成：../data/gap/data418.obj\n",
      "OBJ 文件已生成：../data/gap/data419.obj\n",
      "OBJ 文件已生成：../data/gap/data420.obj\n",
      "OBJ 文件已生成：../data/gap/data421.obj\n",
      "OBJ 文件已生成：../data/gap/data422.obj\n",
      "OBJ 文件已生成：../data/gap/data423.obj\n",
      "OBJ 文件已生成：../data/gap/data424.obj\n",
      "OBJ 文件已生成：../data/gap/data425.obj\n",
      "OBJ 文件已生成：../data/gap/data426.obj\n",
      "OBJ 文件已生成：../data/gap/data427.obj\n",
      "OBJ 文件已生成：../data/gap/data428.obj\n",
      "OBJ 文件已生成：../data/gap/data429.obj\n",
      "OBJ 文件已生成：../data/gap/data430.obj\n",
      "OBJ 文件已生成：../data/gap/data431.obj\n",
      "OBJ 文件已生成：../data/gap/data432.obj\n",
      "OBJ 文件已生成：../data/gap/data433.obj\n",
      "OBJ 文件已生成：../data/gap/data434.obj\n",
      "OBJ 文件已生成：../data/gap/data435.obj\n",
      "OBJ 文件已生成：../data/gap/data436.obj\n",
      "OBJ 文件已生成：../data/gap/data437.obj\n",
      "OBJ 文件已生成：../data/gap/data438.obj\n",
      "OBJ 文件已生成：../data/gap/data439.obj\n",
      "OBJ 文件已生成：../data/gap/data440.obj\n",
      "OBJ 文件已生成：../data/gap/data441.obj\n",
      "OBJ 文件已生成：../data/gap/data442.obj\n",
      "OBJ 文件已生成：../data/gap/data443.obj\n",
      "OBJ 文件已生成：../data/gap/data444.obj\n",
      "OBJ 文件已生成：../data/gap/data445.obj\n",
      "OBJ 文件已生成：../data/gap/data446.obj\n",
      "OBJ 文件已生成：../data/gap/data447.obj\n",
      "OBJ 文件已生成：../data/gap/data448.obj\n",
      "OBJ 文件已生成：../data/gap/data449.obj\n",
      "OBJ 文件已生成：../data/gap/data450.obj\n",
      "OBJ 文件已生成：../data/gap/data451.obj\n",
      "OBJ 文件已生成：../data/gap/data452.obj\n",
      "OBJ 文件已生成：../data/gap/data453.obj\n",
      "OBJ 文件已生成：../data/gap/data454.obj\n",
      "OBJ 文件已生成：../data/gap/data455.obj\n",
      "OBJ 文件已生成：../data/gap/data456.obj\n",
      "OBJ 文件已生成：../data/gap/data457.obj\n",
      "OBJ 文件已生成：../data/gap/data458.obj\n",
      "OBJ 文件已生成：../data/gap/data459.obj\n",
      "OBJ 文件已生成：../data/gap/data460.obj\n",
      "OBJ 文件已生成：../data/gap/data461.obj\n",
      "OBJ 文件已生成：../data/gap/data462.obj\n",
      "OBJ 文件已生成：../data/gap/data463.obj\n",
      "OBJ 文件已生成：../data/gap/data464.obj\n",
      "OBJ 文件已生成：../data/gap/data465.obj\n",
      "OBJ 文件已生成：../data/gap/data466.obj\n",
      "OBJ 文件已生成：../data/gap/data467.obj\n",
      "OBJ 文件已生成：../data/gap/data468.obj\n",
      "OBJ 文件已生成：../data/gap/data469.obj\n",
      "OBJ 文件已生成：../data/gap/data470.obj\n",
      "OBJ 文件已生成：../data/gap/data471.obj\n",
      "OBJ 文件已生成：../data/gap/data472.obj\n",
      "OBJ 文件已生成：../data/gap/data473.obj\n",
      "OBJ 文件已生成：../data/gap/data474.obj\n",
      "OBJ 文件已生成：../data/gap/data475.obj\n",
      "OBJ 文件已生成：../data/gap/data476.obj\n",
      "OBJ 文件已生成：../data/gap/data477.obj\n",
      "OBJ 文件已生成：../data/gap/data478.obj\n",
      "OBJ 文件已生成：../data/gap/data479.obj\n",
      "OBJ 文件已生成：../data/gap/data480.obj\n",
      "OBJ 文件已生成：../data/gap/data481.obj\n",
      "OBJ 文件已生成：../data/gap/data482.obj\n",
      "OBJ 文件已生成：../data/gap/data483.obj\n",
      "OBJ 文件已生成：../data/gap/data484.obj\n",
      "OBJ 文件已生成：../data/gap/data485.obj\n",
      "OBJ 文件已生成：../data/gap/data486.obj\n",
      "OBJ 文件已生成：../data/gap/data487.obj\n",
      "OBJ 文件已生成：../data/gap/data488.obj\n",
      "OBJ 文件已生成：../data/gap/data489.obj\n",
      "OBJ 文件已生成：../data/gap/data490.obj\n",
      "OBJ 文件已生成：../data/gap/data491.obj\n",
      "OBJ 文件已生成：../data/gap/data492.obj\n",
      "OBJ 文件已生成：../data/gap/data493.obj\n",
      "OBJ 文件已生成：../data/gap/data494.obj\n",
      "OBJ 文件已生成：../data/gap/data495.obj\n",
      "OBJ 文件已生成：../data/gap/data496.obj\n",
      "OBJ 文件已生成：../data/gap/data497.obj\n",
      "OBJ 文件已生成：../data/gap/data498.obj\n",
      "OBJ 文件已生成：../data/gap/data499.obj\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# 完整跑仿真程序\n",
    "\n",
    "import numpy as np\n",
    "import triangle\n",
    "import numpy as np\n",
    "from shapely.geometry import Polygon\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append(r\"C:\\Reaserch\\CSTStudioSuite2021\\AMD64\\python_cst_libraries\")\n",
    "import cst.interface\n",
    "\n",
    "import trimesh\n",
    "import plotly.graph_objects as go\n",
    "from tqdm import tqdm\n",
    "line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "\n",
    "\n",
    "# 生成一个随机的二维多边形\n",
    "def generate_random_2d_polygon(num_vertices=6):\n",
    "    #points = np.random.rand(num_vertices, 2)\n",
    "    points = np.random.uniform(-19, 19,size=(num_vertices, 2))\n",
    "    center = np.mean(points, axis=0)\n",
    "    angles = np.arctan2(points[:, 1] - center[1], points[:, 0] - center[0])\n",
    "    points = points[np.argsort(angles)]\n",
    "    return points\n",
    "\n",
    "def generate_polygon_with_fixed_edges2(fixed_edges, num_random_vertices=4):\n",
    "    # 提取固定边的顶点\n",
    "    fixed_points = np.vstack(fixed_edges)\n",
    "    \n",
    "    # 在 -19 到 19 之间生成间隔为 0.1 的点\n",
    "    x_values = np.arange(-19, 19.1, 9)\n",
    "    y_values = np.arange(-19, 19.1, 9)\n",
    "    \n",
    "    # 随机选择 num_random_vertices 个点\n",
    "    random_points = []\n",
    "    while len(random_points) < num_random_vertices:\n",
    "        # 随机选择 x 和 y 坐标\n",
    "        x = np.random.choice(x_values)\n",
    "        y = np.random.choice(y_values)\n",
    "        point = np.array([x, y])\n",
    "        random_points.append(point)\n",
    "    \n",
    "    random_points = np.array(random_points)\n",
    "    \n",
    "    # 将固定的点和随机点合并在一起\n",
    "    all_points = np.vstack([fixed_points, random_points])\n",
    "    \n",
    "    # 计算所有点的中心点\n",
    "    center = np.mean(all_points, axis=0)\n",
    "    \n",
    "    # 按照与中心点的角度对所有点进行排序（确保按逆时针方向排列）\n",
    "    angles = np.arctan2(all_points[:, 1] - center[1], all_points[:, 0] - center[0])\n",
    "    sorted_points = all_points[np.argsort(angles)]\n",
    "    \n",
    "    # 使用 shapely 生成 Polygon\n",
    "    polygon = Polygon(sorted_points)\n",
    "    \n",
    "    return polygon, sorted_points\n",
    "\n",
    "\n",
    "# 生成包含已知边的随机二维多边形（y坐标要大于0.4或者小于0.3）\n",
    "def generate_polygon_with_fixed_edges(fixed_edges, num_random_vertices=4):\n",
    "    # 提取固定边的顶点\n",
    "    fixed_points = np.vstack(fixed_edges)\n",
    "    \n",
    "    # 随机生成其余的点，满足 y > 0.4 或 y < 0.3\n",
    "    random_points = []\n",
    "    while len(random_points) < num_random_vertices:\n",
    "        #point = np.random.rand(2)  # 生成一个随机点\n",
    "        point = np.random.uniform(-19, 19,size=2)\n",
    "        #if point[1] > 0.4 or point[1] < 0.3:  # 仅保留 y 坐标符合条件的点\n",
    "        random_points.append(point)\n",
    "    random_points = np.array(random_points)\n",
    "    \n",
    "    # 将固定的点和随机点合并在一起\n",
    "    all_points = np.vstack([fixed_points, random_points])\n",
    "    \n",
    "    # 计算所有点的中心点\n",
    "    center = np.mean(all_points, axis=0)\n",
    "    \n",
    "    # 按照与中心点的角度对所有点进行排序（确保按逆时针方向排列）\n",
    "    angles = np.arctan2(all_points[:, 1] - center[1], all_points[:, 0] - center[0])\n",
    "    sorted_points = all_points[np.argsort(angles)]\n",
    "    \n",
    "    # 使用 shapely 生成 Polygon\n",
    "    polygon = Polygon(sorted_points)\n",
    "    \n",
    "    return polygon, sorted_points\n",
    "# 对多边形进行三角剖分\n",
    "def constrained_triangulation(polygon_points):\n",
    "    vertices = np.array(polygon_points)\n",
    "    # 定义约束边，保持多边形的边界不被破坏\n",
    "    segments = np.array([[i, (i + 1) % len(vertices)] for i in range(len(vertices))])\n",
    "    \n",
    "    # 使用 triangle 库进行带约束的三角剖分\n",
    "    A = dict(vertices=vertices, segments=segments)\n",
    "    triangulation = triangle.triangulate(A, 'p')\n",
    "    \n",
    "    return triangulation\n",
    "\n",
    "# 将三角剖分结果保存为OBJ文件\n",
    "def export_to_obj(triangulation, filename=\"polygon_triangulated.obj\"):\n",
    "    vertices = triangulation['vertices']\n",
    "    triangles = triangulation['triangles']\n",
    "    \n",
    "    with open(filename, 'w') as f:\n",
    "        # 写入顶点信息\n",
    "        for v in vertices:\n",
    "            f.write(f\"v {v[0]} {v[1]} 0.0\\n\")  # z 设为 0 表示在二维平面上\n",
    "        \n",
    "        # 写入面（每个面由3个顶点构成）\n",
    "        for tri in triangles:\n",
    "            # OBJ 索引从1开始，因此要加1\n",
    "            f.write(f\"f {tri[0] + 1} {tri[1] + 1} {tri[2] + 1}\\n\")\n",
    "\n",
    "\n",
    "# 加载OBJ文件并转换为Plotly格式\n",
    "def plot_obj_in_jupyter(obj_filename):\n",
    "    # 使用trimesh加载OBJ文件\n",
    "    mesh = trimesh.load(obj_filename)\n",
    "    \n",
    "    # 获取顶点和面数据\n",
    "    vertices = mesh.vertices\n",
    "    faces = mesh.faces\n",
    "    \n",
    "    # 创建Plotly图形对象\n",
    "    mesh_plot = go.Mesh3d(\n",
    "        x=vertices[:, 0],\n",
    "        y=vertices[:, 1],\n",
    "        z=vertices[:, 2],\n",
    "        i=faces[:, 0],\n",
    "        j=faces[:, 1],\n",
    "        k=faces[:, 2],\n",
    "        opacity=0.5,\n",
    "        color='lightblue'\n",
    "    )\n",
    "    \n",
    "    # 设置布局\n",
    "    layout = go.Layout(\n",
    "        scene=dict(\n",
    "            xaxis=dict(visible=False),\n",
    "            yaxis=dict(visible=False),\n",
    "            zaxis=dict(visible=False)\n",
    "        ),\n",
    "        title=\"OBJ File Visualization\"\n",
    "    )\n",
    "    \n",
    "    # 创建并展示图像\n",
    "    fig = go.Figure(data=[mesh_plot], layout=layout)\n",
    "    fig.show()\n",
    "\n",
    "def cst_init(fullname,modeler,mws):\n",
    "    # path = os.getcwd()#获取当前py文件所在文件夹\n",
    "    # filename = 'Patch_Antenna.cst'\n",
    "    # fullname = os.path.join(path,filename)\n",
    "    print(fullname)\n",
    "\n",
    "    # project = cst.interface.DesignEnvironment()\n",
    "    # project.set_quiet_mode(False)\n",
    "    # mws = project.new_mws()\n",
    "    mws.save(fullname)\n",
    "    # modeler = mws.modeler\n",
    "    #贴片天线建模基本参数\n",
    "    a = 38.6 #贴片长\n",
    "    b = 38 #贴片宽\n",
    "    w = 1.46 #馈线宽，100欧姆传输线\n",
    "    l = 40 #馈线长\n",
    "    lx = 100 #基板长\n",
    "    ly = 100 #基板宽\n",
    "    ts = 2 #基板厚\n",
    "    tm = 0.035 #金属层厚\n",
    "    Frq = [2,10] #工作频率，单位：GHz\n",
    "\n",
    "    #在CST中加入结构参数，方便后续手动在CST文件中进行操作\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"a\", \"%f\")' % a)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"b\", \"%f\")' % b)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"w\", \"%f\")' % w)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"l\", \"%f\")' % l)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"lx\", \"%f\")' % lx)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ly\", \"%f\")' % ly)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ts\", \"%f\")' % ts)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"tm\", \"%f\")' % tm)\n",
    "    #建模基本参数设置结束\n",
    "    line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "    #全局单位初始化\n",
    "    sCommand = ['With Units',\n",
    "                '.Geometry \"mm\"',\n",
    "                '.Frequency \"ghz\"',\n",
    "                '.Time \"ns\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define units', sCommand)\n",
    "    #全局单位初始化结束\n",
    "\n",
    "    #工作频率设置\n",
    "    sCommand = 'Solver.FrequencyRange \"%f\",\"%f\"'  % (Frq[0],Frq[1])\n",
    "    modeler.add_to_history('define frequency range', sCommand)\n",
    "    #工作频率设置结束\n",
    "\n",
    "    #背景材料设置\n",
    "    sCommand = ['With Background',\n",
    "                '.ResetBackground',\n",
    "                '.Type \"Normal\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define background', sCommand)\n",
    "    #背景材料设置结束\n",
    "\n",
    "    #边界条件设置。\n",
    "    sCommand = ['With Boundary',\n",
    "                '.Xmin \"expanded open\"',\n",
    "                '.Xmax \"expanded open\"',\n",
    "                '.Ymin \"expanded open\"',\n",
    "                '.Ymax \"expanded open\"',\n",
    "                '.Zmin \"expanded open\"',\n",
    "                '.Zmax \"expanded open\"',\n",
    "                '.Xsymmetry \"none\"',\n",
    "                '.Ysymmetry \"none\"',\n",
    "                '.Zsymmetry \"none\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define boundary', sCommand)\n",
    "    #边界条件设置结束\n",
    "\n",
    "    #新建所需介质材料\n",
    "    er1 = 2.65\n",
    "    sCommand = ['With Material',\n",
    "                '.Reset',\n",
    "                '.Name \"material1\"',\n",
    "                '.FrqType \"all\"',\n",
    "                '.Type \"Normal\"',\n",
    "                '.Epsilon %f' %er1,\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define material: material265', sCommand)\n",
    "    #新建所需介质材料结束\n",
    "\n",
    "    #使Bounding Box显示\n",
    "    sCommand = 'Plot.DrawBox \"True\"'\n",
    "    modeler.add_to_history('switch bounding box', sCommand)\n",
    "    #使Bounding Box显示结束\n",
    "\n",
    "    sCommand = 'Plot.ZoomToStructure'\n",
    "    modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "    Str_Name='line1'\n",
    "    Str_Component='Feed'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"-a/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand) \n",
    "\n",
    "    Str_Name='line2'\n",
    "    Str_Component='Feed'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"a/2\",\"lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)  \n",
    "    Str_Name='bottom'\n",
    "    Str_Component='Bottom'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "                '.Zrange \"-ts-tm\",\"-ts\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand) \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "    Str_Name='sub'\n",
    "    Str_Component='Sub'\n",
    "    Str_Material='material1'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "                '.Zrange \"-ts\",\"0\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "    #建模结束\n",
    "\n",
    "    sCommand = 'Plot.ZoomToStructure'\n",
    "    modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "    #端口设置，采用的方法和在CST里面选中一个面然后设置端口是一样的操作，这里完全复现\n",
    "    #端口1\n",
    "    sCommand = 'Pick.PickFaceFromId \"Feed:line1\",4'\n",
    "    modeler.add_to_history('pick face', sCommand)\n",
    "    sCommand = ['With Port',\n",
    "                '.Reset',\n",
    "                '.PortNumber 1',\n",
    "                '.Label  \"\"',\n",
    "                '.NumberOfModes 1',\n",
    "                '.AdjustPolarization \"False\"',\n",
    "                '.PolarizationAngle 0.0',\n",
    "                '.ReferencePlaneDistance 0',\n",
    "                '.TextSize 50',\n",
    "                '.TextMaxLimit 0',\n",
    "                '.Coordinates \"Picks\"',\n",
    "                '.Orientation \"positive\"',\n",
    "                '.PortOnBound \"False\"',\n",
    "                '.ClipPickedPortToBound \"False\"',\n",
    "                '.Xrange \"-lx/2\",\"-lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "                '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "                '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "                '.SingleEnded \"False\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)     \n",
    "    modeler.add_to_history('define port1', sCommand)\n",
    "\n",
    "    #端口2\n",
    "    sCommand = 'Pick.PickFaceFromId \"Feed:line2\",6'\n",
    "    modeler.add_to_history('pick face', sCommand)\n",
    "    sCommand = ['With Port',\n",
    "                '.Reset',\n",
    "                '.PortNumber 2',\n",
    "                '.Label  \"\"',\n",
    "                '.NumberOfModes 1',\n",
    "                '.AdjustPolarization \"False\"',\n",
    "                '.PolarizationAngle 0.0',\n",
    "                '.ReferencePlaneDistance 0',\n",
    "                '.TextSize 50',\n",
    "                '.TextMaxLimit 0',\n",
    "                '.Coordinates \"Picks\"',\n",
    "                '.Orientation \"positive\"',\n",
    "                '.PortOnBound \"False\"',\n",
    "                '.ClipPickedPortToBound \"False\"',\n",
    "                '.Xrange \"lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "                '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "                '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "                '.SingleEnded \"False\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)     \n",
    "    modeler.add_to_history('define port2', sCommand)\n",
    "    #端口设置结束\n",
    "    # 原版的\n",
    "    # #设置远场方向图的Monitor\n",
    "    # sCommand = ['With Monitor',\n",
    "    #             '.Reset',\n",
    "    #             '.Domain \"Frequency\"',\n",
    "    #             '.FieldType \"Farfield\"',\n",
    "    #             #'.ExportFarfieldSource \"False\"',\n",
    "    #             '.ExportFarfieldSource \"True\"',\n",
    "    #             '.UseSubvolume \"False\"',\n",
    "    #             '.Coordinates \"Picks\"',\n",
    "    #             '.SetSubvolume \"50\", \"50\", \"-0.73\", \"0.73\", \"0\", \"0.035\"',\n",
    "    #             '.SetSubvolumeOffset \"10\", \"10\", \"10\", \"10\", \"10\", \"10\" ',\n",
    "    #             '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "    #             '.SetSubvolumeOffsetType \"FractionOfWavelength\" ',\n",
    "    #             '.EnableNearfieldCalculation \"True\" ',\n",
    "    #             '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.05),\n",
    "    #             'End With']\n",
    "    # sCommand = line_break.join(sCommand) \n",
    "    # modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "    # #设置远场方向图的Monitor结束\n",
    "\n",
    "\n",
    "\n",
    "    # 程序里面的\n",
    "    # 设置远场方向图的Monitor\n",
    "    sCommand = ['With Monitor',\n",
    "                '.Reset',\n",
    "                '.Domain \"Frequency\"',\n",
    "                '.FieldType \"Farfield\"',\n",
    "                #'.ExportFarfieldSource \"False\"',\n",
    "                '.ExportFarfieldSource \"True\"',\n",
    "                '.UseSubvolume \"False\"',\n",
    "                '.Coordinates \"Structure\"',\n",
    "                '.SetSubvolume \"-50\", \"50\", \"-50\", \"50\", \"-2.035\", \"6.035\"',\n",
    "                '.SetSubvolumeOffset \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\"',\n",
    "                '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "                '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.2),\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand) \n",
    "    modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "    #设置远场方向图的Monitor结束\n",
    "\n",
    "# With Monitor\n",
    "#           .Reset \n",
    "#           .Domain \"Frequency\"\n",
    "#           .FieldType \"Efield\"\n",
    "#           .Dimension \"Volume\" \n",
    "#           .UseSubvolume \"False\" \n",
    "#           .Coordinates \"Structure\" \n",
    "#           .SetSubvolume \"-50\", \"50\", \"-50\", \"50\", \"-2.035\", \"6.035\" \n",
    "#           .SetSubvolumeOffset \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\" \n",
    "#           .SetSubvolumeInflateWithOffset \"False\" \n",
    "#           .CreateUsingLinearStep \"2\", \"10\", \"0.9\"\n",
    "# End With\n",
    "\n",
    "\n",
    "# Mesh.SetCreator \"High Frequency\" \n",
    "\n",
    "# With Solver \n",
    "#      .Method \"Hexahedral\"\n",
    "#      .CalculationType \"TD-S\"\n",
    "#      .StimulationPort \"All\"\n",
    "#      .StimulationMode \"All\"\n",
    "#      .SteadyStateLimit \"-40\"\n",
    "#      .MeshAdaption \"False\"\n",
    "#      .AutoNormImpedance \"False\"\n",
    "#      .NormingImpedance \"50\"\n",
    "#      .CalculateModesOnly \"False\"\n",
    "#      .SParaSymmetry \"False\"\n",
    "#      .StoreTDResultsInCache  \"False\"\n",
    "#      .FullDeembedding \"False\"\n",
    "#      .SuperimposePLWExcitation \"False\"\n",
    "#      .UseSensitivityAnalysis \"False\"\n",
    "# End With\n",
    "\n",
    "    #求解\n",
    "    sCommand = ['Mesh.SetCreator \"High Frequency\" ',\n",
    "                'With Solver',\n",
    "                '.Method \"Hexahedral\"',\n",
    "                '.CalculationType \"TD-S\"',\n",
    "                '.StimulationPort \"All\"',\n",
    "                '.StimulationMode \"All\"',\n",
    "                '.SteadyStateLimit \"-40\"',\n",
    "                '.MeshAdaption \"False\"',\n",
    "                '.AutoNormImpedance \"False\"',\n",
    "                '.NormingImpedance \"50\"',\n",
    "                '.CalculateModesOnly \"False\"',\n",
    "                '.SParaSymmetry \"False\"',\n",
    "                #'.StoreTDResultsInCache  \"False\"',\n",
    "                '.StoreTDResultsInCache  \"True\"',\n",
    "                '.FullDeembedding \"False\"',\n",
    "                '.SuperimposePLWExcitation \"False\"',\n",
    "                '.UseSensitivityAnalysis \"False\"',         \n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand) \n",
    "    modeler.add_to_history('define Mesh.SetCreator',sCommand)\n",
    "\n",
    "    # # 设置成极坐标\n",
    "    # sCommand =  ['With FarfieldPlot',\n",
    "    #     '.Plottype \"Polar\"',\n",
    "    #     '.Vary \"angle1\"',\n",
    "    #     '.Theta \"90\"',\n",
    "    #     '.Phi \"90\"' ,\n",
    "    #     '.Step \"1\"',\n",
    "    #     '.Step2 \"1\"',\n",
    "    #     '.SetLockSteps \"True\"',\n",
    "    #     '.SetPlotRangeOnly \"False\"',\n",
    "    #     '.SetThetaStart \"0\"',\n",
    "    #     '.SetThetaEnd \"180\"' ,\n",
    "    #     '.SetPhiStart \"0\"' ,\n",
    "    #     '.SetPhiEnd \"360\"' ,\n",
    "    #     '.SetTheta360 \"False\"' ,\n",
    "    #     '.SymmetricRange \"False\"' ,\n",
    "    #     '.SetTimeDomainFF \"False\"' ,\n",
    "    #     '.SetFrequency \"-1\"' ,\n",
    "    #     '.SetTime \"0\"' ,\n",
    "    #     '.SetColorByValue \"True\"' ,\n",
    "    #     '.DrawStepLines \"False\"' ,\n",
    "    #     '.DrawIsoLongitudeLatitudeLines \"False\"' ,\n",
    "    #     '.ShowStructure \"False\"' ,\n",
    "    #     '.ShowStructureProfile \"False\"' ,\n",
    "    #     '.SetStructureTransparent \"False\"' ,\n",
    "    #     '.SetFarfieldTransparent \"False\"' ,\n",
    "    #     '.AspectRatio \"Free\"' ,\n",
    "    #     '.ShowGridlines \"True\"' ,\n",
    "    #     '.SetSpecials \"enablepolarextralines\"' ,\n",
    "    #     '.SetPlotMode \"Directivity\"' ,\n",
    "    #     '.Distance \"1\"' ,\n",
    "    #     '.UseFarfieldApproximation \"True\"' ,\n",
    "    #     '.IncludeUnitCellSidewalls \"True\"' ,\n",
    "    #     '.SetScaleLinear \"False\"' ,\n",
    "    #     '.SetLogRange \"40\"' ,\n",
    "    #     '.SetLogNorm \"0\"' ,\n",
    "    #     '.DBUnit \"0\"' ,\n",
    "    #     '.SetMaxReferenceMode \"abs\"' ,\n",
    "    #     '.EnableFixPlotMaximum \"False\"' ,\n",
    "    #     '.SetFixPlotMaximumValue \"1\"' ,\n",
    "    #     '.SetInverseAxialRatio \"False\"' ,\n",
    "    #     '.SetAxesType \"user\"' ,\n",
    "    #     '.SetAntennaType \"unknown\"',\n",
    "    #     '.Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"' ,\n",
    "    #     '.PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.SetCoordinateSystemType \"spherical\"' ,\n",
    "    #     '.SetAutomaticCoordinateSystem \"True\"' ,\n",
    "    #     '.SetPolarizationType \"Linear\"' ,\n",
    "    #     '.SlantAngle 0.000000e+00' ,\n",
    "    #     '.Origin \"bbox\"' ,\n",
    "    #     '.Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.SetUserDecouplingPlane \"False\"' ,\n",
    "    #     '.UseDecouplingPlane \"False\"' ,\n",
    "    #     '.DecouplingPlaneAxis \"X\"' ,\n",
    "    #     '.DecouplingPlanePosition \"0.000000e+00\"' ,\n",
    "    #     '.LossyGround \"False\"' ,\n",
    "    #     '.GroundEpsilon \"1\"' ,\n",
    "    #     '.GroundKappa \"0\"' ,\n",
    "    #     '.EnablePhaseCenterCalculation \"False\"' ,\n",
    "    #     '.SetPhaseCenterAngularLimit \"3.000000e+01\"' ,\n",
    "    #     '.SetPhaseCenterComponent \"boresight\"' ,\n",
    "    #     '.SetPhaseCenterPlane \"both\"' ,\n",
    "    #     '.ShowPhaseCenter \"True\"' ,\n",
    "    #     '.ClearCuts' ,\n",
    "    #     '.StoreSettings',\n",
    "    #     'End With']\n",
    "\n",
    "    # sCommand = line_break.join(sCommand)\n",
    "    # modeler.add_to_history('FarfieldPlot Polar', sCommand)\n",
    "\n",
    "def cst_import_obj(modeler,file_path):\n",
    "    #file_path=\"C:\\\\Reaserch\\\\Code\\\\CEM\\\\AntennaGPT\\\\code\\\\polygon_triangulated3.obj\"\n",
    "    Str_Name='patch'\n",
    "    Str_Component='Patch'\n",
    "    sCommand = ['With OBJ',\n",
    "                '.Reset',\n",
    "                '.FileName (\"%s\")' % file_path,\n",
    "                '.Name (\"test\")',\n",
    "                '.Layer (\"Patch\")',\n",
    "                '.ScaleFactor (\"1\")',\n",
    "                '.ImportToActiveCoordinateSystem (False)',\n",
    "                '.Read',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Import OBJ File', sCommand)\n",
    "    # pick一个face\n",
    "    sCommand = 'Pick.PickFaceFromId \"Patch:test\",0'\n",
    "    modeler.add_to_history('pick face Patch:test', sCommand)\n",
    "\n",
    "    #  Extrude Face\n",
    "    sCommand = ['With Extrude',\n",
    "            '.Reset',\n",
    "            '.Name (\"solid2\")',\n",
    "            '.Component (\"component1\")',\n",
    "            '.Material (\"PEC\")',\n",
    "            '.Mode (\"Picks\")',\n",
    "            '.Height (\"tm\")',\n",
    "            '.Taper (5)',\n",
    "            '.UsePicksForHeight (False)',\n",
    "            '.DeleteBaseFaceSolid (False)',\n",
    "            '.ClearPickedFace (True)',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Extrude Component (\"component1\")', sCommand)\n",
    "def cst_delete_compo(modeler):\n",
    "    sCommand = 'Component.Delete \"component1\"'\n",
    "    modeler.add_to_history('Delete component1', sCommand)\n",
    "    sCommand = 'Component.Delete \"Patch\"'\n",
    "    modeler.add_to_history('Delete Patch', sCommand)\n",
    "def cst_run(modeler,mws,fullname):\n",
    "    #仿真开始\n",
    "    modeler.run_solver()\n",
    "    #仿真结束\n",
    "\n",
    "    mws.save(fullname)#保存\n",
    "def cst_export_s(modeler,file_path):\n",
    "    # 导出\n",
    "    sCommand = ['With TOUCHSTONE',\n",
    "                '.Reset',\n",
    "                '.FileName (\"%s\")' %(file_path),\n",
    "                '.Impedance (100)',\n",
    "                '.FrequencyRange (\"Full\")',\n",
    "                '.Renormalize (False)',\n",
    "                '.UseARResults (False)',\n",
    "                '.SetNSamples (1001)',\n",
    "                '.Format (\"DB\")',\n",
    "                '.Write',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Export TOUCHSTONE s', sCommand)\n",
    "\n",
    "\n",
    "def cst_export_farfiled(i):\n",
    "\n",
    "    for j in range(200,1100,5):\n",
    "        # 导出\n",
    "        sCommand =  ['SelectTreeItem (\"Farfields\\farfield（f=%.2f）[1]\")' % j,\n",
    "                    'With ASCIIExport',\n",
    "                    '.Reset',\n",
    "                    '.FileName (\"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\Farfiled\\data%s\\example.txt\")' % str(j),\n",
    "                    '.Mode (\"FixedNumber\")',\n",
    "                    '.Execute',\n",
    "                    'End With']\n",
    "\n",
    "        sCommand = line_break.join(sCommand)\n",
    "        modeler.add_to_history('Export farfiled ASCII', sCommand) \n",
    "# 主程序\n",
    "if __name__ == \"__main__\":\n",
    "    # 路径\n",
    "    file='../data/gap/'\n",
    "\n",
    "    path = os.getcwd()\n",
    "    filename = 'Patch_Antenna.cst'\n",
    "    fullname = os.path.join(path,filename)\n",
    "\n",
    "    # 假设有两条固定的边\n",
    "    fixed_edge_1 = np.array([[19.3, 0.73], [19.3, -0.73]])  # 第一条固定边\n",
    "    fixed_edge_2 = np.array([[-19.3, 0.73], [-19.3, -0.73]])  # 第二条固定边\n",
    "\n",
    "    #polygon_points = generate_random_2d_polygon(num_vertices)\n",
    "\n",
    "    # 生成一个随机多边形，包含固定的边，且随机点的y坐标满足要求\n",
    "    project = cst.interface.DesignEnvironment()\n",
    "    project.set_quiet_mode(False)\n",
    "    mws = project.new_mws()\n",
    "    modeler = mws.modeler\n",
    "\n",
    "    cst_init(fullname,modeler,mws)\n",
    "    \n",
    "    for i in tqdm(range(500)):\n",
    "        \n",
    "        file_obj=file+'data'+str(i)+'.obj'\n",
    "        file_s2p=file+'data'+str(i)\n",
    "        \n",
    "\n",
    "        polygon, sorted_points = generate_polygon_with_fixed_edges2([fixed_edge_1, fixed_edge_2], num_random_vertices=5)\n",
    "\n",
    "        # 进行带约束的三角剖分\n",
    "        triangulation = constrained_triangulation(sorted_points)\n",
    "        \n",
    "        # 导出为OBJ文件\n",
    "        export_to_obj(triangulation,file_obj)\n",
    "        \n",
    "        print(\"OBJ 文件已生成：\"+file_obj)\n",
    "        # 展示生成的 OBJ 文件\n",
    "        #plot_obj_in_jupyter(file_obj)\n",
    "        \n",
    "        # cst_import_obj(modeler,os.path.abspath(file_obj))\n",
    "        # cst_run(modeler,mws,fullname)\n",
    "        # cst_export_s(modeler,os.path.abspath(file_s2p))\n",
    "        # cst_delete_compo(modeler)\n",
    "        # break\n",
    "        \n",
    "        \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-19.3 ,   0.73],\n",
       "       [-19.3 ,  -0.73],\n",
       "       [ -1.  ,  -1.  ],\n",
       "       [ 19.3 ,  -0.73],\n",
       "       [ 19.3 ,   0.73],\n",
       "       [  8.  ,  17.  ],\n",
       "       [-19.  ,  17.  ],\n",
       "       [-19.  ,  17.  ],\n",
       "       [-19.  ,  17.  ]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted_points"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 500/500 [00:00<00:00, 4792.70it/s]\n"
     ]
    }
   ],
   "source": [
    "# 建立用于保存FarField的文件\n",
    "\n",
    "import os\n",
    "file='C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\gap\\Farfiled'\n",
    "for i in tqdm(range(500)):\n",
    "    farfield_path=file+'\\data'+str(i)\n",
    "    os.makedirs(farfield_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "cst_run(modeler,mws,fullname)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "cst_export_farfiled(200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "ResultItem does not exist for run id=0. Please note that a parameter change in CST Studio Suite deletes results with run id=0.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[38], line 6\u001b[0m\n\u001b[0;32m      4\u001b[0m s11 \u001b[38;5;241m=\u001b[39m project\u001b[38;5;241m.\u001b[39mget_3d()\u001b[38;5;241m.\u001b[39mget_result_item(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1D Results\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mPort signals\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mi1\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m      5\u001b[0m s11 \u001b[38;5;241m=\u001b[39m project\u001b[38;5;241m.\u001b[39mget_3d()\u001b[38;5;241m.\u001b[39mget_result_item(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m1D Results\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mEnergy\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mEnergy [1]\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m----> 6\u001b[0m Modes \u001b[38;5;241m=\u001b[39m \u001b[43mproject\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_3d\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_result_item\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m2D/3D Results\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mPort Modes\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mPort1\u001b[39;49m\u001b[38;5;124;43m\\\u001b[39;49m\u001b[38;5;124;43mh1\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m      7\u001b[0m Farfields \u001b[38;5;241m=\u001b[39m project\u001b[38;5;241m.\u001b[39mget_3d()\u001b[38;5;241m.\u001b[39mget_result_item(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFarfields\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mfarfield（f=2） [1]\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
      "\u001b[1;31mValueError\u001b[0m: ResultItem does not exist for run id=0. Please note that a parameter change in CST Studio Suite deletes results with run id=0."
     ]
    }
   ],
   "source": [
    "import cst.results\n",
    "project = cst.results.ProjectFile(fullname,allow_interactive=True)\n",
    "s11 = project.get_3d().get_result_item(r\"1D Results\\S-Parameters\\S1,2\")\n",
    "s11 = project.get_3d().get_result_item(r\"1D Results\\Port signals\\i1\")\n",
    "s11 = project.get_3d().get_result_item(r\"1D Results\\Energy\\Energy [1]\")\n",
    "Modes = project.get_3d().get_result_item(r\"2D/3D Results\\Port Modes\\Port1\\h1\")\n",
    "Farfields = project.get_3d().get_result_item(r\"Farfields\\farfield（f=2） [1]\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "cst_export_s(modeler,os.path.abspath(file_s2p))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand = ['With TOUCHSTONE',\n",
    "            '.FileName (\"%s\")' %(os.path.abspath(file_s2p)),\n",
    "            '.Impedance (100)',\n",
    "            '.FrequencyRange (\"Full\")',\n",
    "            '.Renormalize (True)',\n",
    "            '.UseARResults (False)',\n",
    "            '.SetNSamples (1001)',\n",
    "            '.Format (\"DB\")',\n",
    "            '.Write',\n",
    "            'End With']\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('Export TOUCHSTONE s', sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "i=200\n",
    "sCommand =  ['SelectTreeItem(\"Farfields\\farfield（f=2）[1]\")',\n",
    "            'With ASCIIExport',\n",
    "            '.Reset',\n",
    "            '.FileName (\"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\Farfiled\\data200\\example1.txt\")',\n",
    "            '.Mode (\"FixedNumber\")',\n",
    "            '.Execute',\n",
    "            'End With']\n",
    "\n",
    "sCommand = line_break.join(sCommand)\n",
    "modeler.add_to_history('Export farfiled ASCII', sCommand) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "#求解\n",
    "sCommand = ['Mesh.SetCreator \"High Frequency\" ',\n",
    "               'With Solver',\n",
    "               '.Method \"Hexahedral\"',\n",
    "               '.CalculationType \"TD-S\"',\n",
    "               '.StimulationPort \"All\"',\n",
    "               '.StimulationMode \"All\"',\n",
    "               '.SteadyStateLimit \"-40\"',\n",
    "               '.MeshAdaption \"False\"',\n",
    "               '.AutoNormImpedance \"False\"',\n",
    "               '.NormingImpedance \"50\"',\n",
    "               '.CalculateModesOnly \"False\"',\n",
    "               '.SParaSymmetry \"False\"',\n",
    "               '.StoreTDResultsInCache  \"False\"',\n",
    "               '.FullDeembedding \"False\"',\n",
    "               '.SuperimposePLWExcitation \"False\"',\n",
    "               '.UseSensitivityAnalysis \"False\"',         \n",
    "               'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('define time domain solver parameters',sCommand)\n",
    "\n",
    "\n",
    "# 设置求解器Type\n",
    "#求解\n",
    "sCommand = ['ChangeSolverType \"HF Time Domain\"']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('change solver type',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#FarfieldPlot\n",
    "sCommand = ['With FarfieldPlot',\n",
    "     '.Plottype \"3D\"',\n",
    "     '.Vary \"angle1\"',\n",
    "     '.Theta \"90\"',\n",
    "     '.Phi \"90\"',\n",
    "     '.Step \"5\"',\n",
    "     '.Step2 \"5\"',\n",
    "     '.SetLockSteps \"True\"' ,\n",
    "     '.SetPlotRangeOnly \"False\"' ,\n",
    "     '.SetThetaStart \"0\"' ,\n",
    "     '.SetThetaEnd \"180\"' ,\n",
    "     '.SetPhiStart \"0\"' ,\n",
    "     '.SetPhiEnd \"360\"' ,\n",
    "     '.SetTheta360 \"False\"' ,\n",
    "     '.SymmetricRange \"False\"' ,\n",
    "     '.SetTimeDomainFF \"False\"' ,\n",
    "     '.SetFrequency \"-1\"' ,\n",
    "     '.SetTime \"0\"' ,\n",
    "     '.SetColorByValue \"True\"' ,\n",
    "     '.DrawStepLines \"False\"' ,\n",
    "     '.DrawIsoLongitudeLatitudeLines \"False\"',\n",
    "     '.ShowStructure \"False\"',\n",
    "     '.ShowStructureProfile \"False\"' ,\n",
    "     '.SetStructureTransparent \"False\"' ,\n",
    "     '.SetFarfieldTransparent \"False\"' ,\n",
    "     '.AspectRatio \"Free\"' ,\n",
    "     '.ShowGridlines \"True\"' ,\n",
    "     '.SetSpecials \"enablepolarextralines\"' ,\n",
    "     '.SetPlotMode \"Directivity\"' ,\n",
    "     '.Distance \"1\"' ,\n",
    "     '.UseFarfieldApproximation \"True\"' ,\n",
    "     '.IncludeUnitCellSidewalls \"True\"' ,\n",
    "     '.SetScaleLinear \"False\"' ,\n",
    "     '.SetLogRange \"40\"' ,\n",
    "     '.SetLogNorm \"0\"' ,\n",
    "     '.DBUnit \"0\"' ,\n",
    "     '.SetMaxReferenceMode \"abs\"' ,\n",
    "     '.EnableFixPlotMaximum \"False\"' ,\n",
    "     '.SetFixPlotMaximumValue \"1\"' ,\n",
    "     '.SetInverseAxialRatio \"False\"' ,\n",
    "     '.SetAxesType \"user\"' ,\n",
    "     '.SetAntennaType \"unknown\"' ,\n",
    "     '.Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"' ,\n",
    "     '.PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetCoordinateSystemType \"spherical\"' ,\n",
    "     '.SetAutomaticCoordinateSystem \"True\"',\n",
    "     '.SetPolarizationType \"Linear\"' ,\n",
    "     '.SlantAngle 0.000000e+00' ,\n",
    "     '.Origin \"bbox\"' ,\n",
    "     '.Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetUserDecouplingPlane \"False\"' ,\n",
    "     '.UseDecouplingPlane \"False\"' ,\n",
    "     '.DecouplingPlaneAxis \"X\"' ,\n",
    "     '.DecouplingPlanePosition \"0.000000e+00\"' ,\n",
    "     '.LossyGround \"False\"' ,\n",
    "     '.GroundEpsilon \"1\"' ,\n",
    "     '.GroundKappa \"0\"' ,\n",
    "     '.EnablePhaseCenterCalculation \"False\"' ,\n",
    "     '.SetPhaseCenterAngularLimit \"3.000000e+01\"' ,\n",
    "     '.SetPhaseCenterComponent \"boresight\"' ,\n",
    "     '.SetPhaseCenterPlane \"both\"' ,\n",
    "     '.ShowPhaseCenter \"True\"' ,\n",
    "     '.ClearCuts' ,\n",
    "     '.StoreSettings',\n",
    "'End With']\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "#FarfieldPlot\n",
    "sCommand = ['With FarfieldPlot',\n",
    "     '.Plottype \"3D\"',\n",
    "     '.Vary \"angle1\"',\n",
    "     '.Theta \"90\"',\n",
    "     '.Phi \"90\"',\n",
    "     '.Step \"5\"',\n",
    "     '.Step2 \"5\"',\n",
    "     '.SetLockSteps \"True\"' ,\n",
    "     '.SetPlotRangeOnly \"False\"' ,\n",
    "     '.SetThetaStart \"0\"' ,\n",
    "     '.SetThetaEnd \"180\"' ,\n",
    "     '.SetPhiStart \"0\"' ,\n",
    "     '.SetPhiEnd \"360\"' ,\n",
    "     '.SetTheta360 \"False\"' ,\n",
    "     '.SymmetricRange \"False\"' ,\n",
    "     '.SetTimeDomainFF \"False\"' ,\n",
    "     '.SetFrequency \"-1\"' ,\n",
    "     '.SetTime \"0\"' ,\n",
    "     '.SetColorByValue \"True\"' ,\n",
    "     '.DrawStepLines \"False\"' ,\n",
    "     '.DrawIsoLongitudeLatitudeLines \"False\"',\n",
    "     '.ShowStructure \"False\"',\n",
    "     '.ShowStructureProfile \"False\"' ,\n",
    "     '.SetStructureTransparent \"False\"' ,\n",
    "     '.SetFarfieldTransparent \"False\"' ,\n",
    "     '.AspectRatio \"Free\"' ,\n",
    "     '.ShowGridlines \"True\"' ,\n",
    "     '.SetSpecials \"enablepolarextralines\"' ,\n",
    "     '.SetPlotMode \"Directivity\"' ,\n",
    "     '.Distance \"1\"' ,\n",
    "     '.UseFarfieldApproximation \"True\"' ,\n",
    "     '.IncludeUnitCellSidewalls \"True\"' ,\n",
    "     '.SetScaleLinear \"False\"' ,\n",
    "     '.SetLogRange \"40\"' ,\n",
    "     '.SetLogNorm \"0\"' ,\n",
    "     '.DBUnit \"0\"' ,\n",
    "     '.SetMaxReferenceMode \"abs\"' ,\n",
    "     '.EnableFixPlotMaximum \"False\"' ,\n",
    "     '.SetFixPlotMaximumValue \"1\"' ,\n",
    "     '.SetInverseAxialRatio \"False\"' ,\n",
    "     '.SetAxesType \"user\"' ,\n",
    "     '.SetAntennaType \"unknown\"' ,\n",
    "     '.Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"' ,\n",
    "     '.PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetCoordinateSystemType \"spherical\"' ,\n",
    "     '.SetAutomaticCoordinateSystem \"True\"',\n",
    "     '.SetPolarizationType \"Linear\"' ,\n",
    "     '.SlantAngle 0.000000e+00' ,\n",
    "     '.Origin \"bbox\"' ,\n",
    "     '.Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetUserDecouplingPlane \"False\"' ,\n",
    "     '.UseDecouplingPlane \"False\"' ,\n",
    "     '.DecouplingPlaneAxis \"X\"' ,\n",
    "     '.DecouplingPlanePosition \"0.000000e+00\"' ,\n",
    "     '.LossyGround \"False\"' ,\n",
    "     '.GroundEpsilon \"1\"' ,\n",
    "     '.GroundKappa \"0\"' ,\n",
    "     '.EnablePhaseCenterCalculation \"False\"' ,\n",
    "     '.SetPhaseCenterAngularLimit \"3.000000e+01\"' ,\n",
    "     '.SetPhaseCenterComponent \"boresight\"' ,\n",
    "     '.SetPhaseCenterPlane \"both\"' ,\n",
    "     '.ShowPhaseCenter \"True\"' ,\n",
    "     '.ClearCuts' ,\n",
    "     '.StoreSettings',\n",
    "     'End With',\n",
    "     'SelectTreeItem(\"Farfields\\farfield (f=10) [1]\")',\n",
    "     'FarfieldPlot.Plot',\n",
    "     'SelectTreeItem(\"Farfields\\farfield (f=10) [2]\")',\n",
    "     'FarfieldPlot.Plot'\n",
    "]\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "#FarfieldPlot\n",
    "sCommand = ['With FarfieldPlot',\n",
    "     '.Plottype \"3D\"',\n",
    "     '.Vary \"angle1\"',\n",
    "     '.Theta \"90\"',\n",
    "     '.Phi \"90\"',\n",
    "     '.Step \"5\"',\n",
    "     '.Step2 \"5\"',\n",
    "     '.SetLockSteps \"True\"' ,\n",
    "     '.SetPlotRangeOnly \"False\"' ,\n",
    "     '.SetThetaStart \"0\"' ,\n",
    "     '.SetThetaEnd \"180\"' ,\n",
    "     '.SetPhiStart \"0\"' ,\n",
    "     '.SetPhiEnd \"360\"' ,\n",
    "     '.SetTheta360 \"False\"' ,\n",
    "     '.SymmetricRange \"False\"' ,\n",
    "     '.SetTimeDomainFF \"False\"' ,\n",
    "     '.SetFrequency \"-1\"' ,\n",
    "     '.SetTime \"0\"' ,\n",
    "     '.SetColorByValue \"True\"' ,\n",
    "     '.DrawStepLines \"False\"' ,\n",
    "     '.DrawIsoLongitudeLatitudeLines \"False\"',\n",
    "     '.ShowStructure \"False\"',\n",
    "     '.ShowStructureProfile \"False\"' ,\n",
    "     '.SetStructureTransparent \"False\"' ,\n",
    "     '.SetFarfieldTransparent \"False\"' ,\n",
    "     '.AspectRatio \"Free\"' ,\n",
    "     '.ShowGridlines \"True\"' ,\n",
    "     '.SetSpecials \"enablepolarextralines\"' ,\n",
    "     '.SetPlotMode \"Directivity\"' ,\n",
    "     '.Distance \"1\"' ,\n",
    "     '.UseFarfieldApproximation \"True\"' ,\n",
    "     '.IncludeUnitCellSidewalls \"True\"' ,\n",
    "     '.SetScaleLinear \"False\"' ,\n",
    "     '.SetLogRange \"40\"' ,\n",
    "     '.SetLogNorm \"0\"' ,\n",
    "     '.DBUnit \"0\"' ,\n",
    "     '.SetMaxReferenceMode \"abs\"' ,\n",
    "     '.EnableFixPlotMaximum \"False\"' ,\n",
    "     '.SetFixPlotMaximumValue \"1\"' ,\n",
    "     '.SetInverseAxialRatio \"False\"' ,\n",
    "     '.SetAxesType \"user\"' ,\n",
    "     '.SetAntennaType \"unknown\"' ,\n",
    "     '.Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"' ,\n",
    "     '.PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetCoordinateSystemType \"spherical\"' ,\n",
    "     '.SetAutomaticCoordinateSystem \"True\"',\n",
    "     '.SetPolarizationType \"Linear\"' ,\n",
    "     '.SlantAngle 0.000000e+00' ,\n",
    "     '.Origin \"bbox\"' ,\n",
    "     '.Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "     '.SetUserDecouplingPlane \"False\"' ,\n",
    "     '.UseDecouplingPlane \"False\"' ,\n",
    "     '.DecouplingPlaneAxis \"X\"' ,\n",
    "     '.DecouplingPlanePosition \"0.000000e+00\"' ,\n",
    "     '.LossyGround \"False\"' ,\n",
    "     '.GroundEpsilon \"1\"' ,\n",
    "     '.GroundKappa \"0\"' ,\n",
    "     '.EnablePhaseCenterCalculation \"False\"' ,\n",
    "     '.SetPhaseCenterAngularLimit \"3.000000e+01\"' ,\n",
    "     '.SetPhaseCenterComponent \"boresight\"' ,\n",
    "     '.SetPhaseCenterPlane \"both\"' ,\n",
    "     '.ShowPhaseCenter \"True\"' ,\n",
    "     #'.ClearCuts' ,\n",
    "     '.StoreSettings',\n",
    "     'End With'\n",
    "]\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand=['SelectTreeItem(\"Farfields\\farfield (f=10) [1]\")',\n",
    "     'FarfieldPlot.Plot',\n",
    "     'SelectTreeItem(\"Farfields\\farfield (f=10) [2]\")',\n",
    "     'FarfieldPlot.Plot'] \n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot SelectTreeItem',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand=['FarfieldPlot.Plot'] \n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot Plot',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sCommand=['With FarfieldPlot',\n",
    "    '.ASCIIExportSummary \"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\code\\Patch_Antenna\\example.txt\"',\n",
    "    'End With'\n",
    "     ]\n",
    "sCommand = line_break.join(sCommand) \n",
    "modeler.add_to_history('FarfieldPlot ASCIIExportSummary',sCommand)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 360度的图\n",
    "With FarfieldPlot \n",
    "     .Plottype \"Cartesian\" \n",
    "     .Vary \"angle1\" \n",
    "     .Theta \"0\" \n",
    "     .Phi \"0\" \n",
    "     .Step \"1\" \n",
    "     .Step2 \"1\" \n",
    "     .SetLockSteps \"True\" \n",
    "     .SetPlotRangeOnly \"False\" \n",
    "     .SetThetaStart \"0\" \n",
    "     .SetThetaEnd \"180\" \n",
    "     .SetPhiStart \"0\" \n",
    "     .SetPhiEnd \"360\" \n",
    "     .SetTheta360 \"True\" \n",
    "     .SymmetricRange \"False\" \n",
    "     .SetTimeDomainFF \"False\" \n",
    "     .SetFrequency \"2\" \n",
    "     .SetTime \"0\" \n",
    "     .SetColorByValue \"True\" \n",
    "     .DrawStepLines \"False\" \n",
    "     .DrawIsoLongitudeLatitudeLines \"False\" \n",
    "     .ShowStructure \"False\" \n",
    "     .ShowStructureProfile \"False\" \n",
    "     .SetStructureTransparent \"False\" \n",
    "     .SetFarfieldTransparent \"False\" \n",
    "     .AspectRatio \"Free\" \n",
    "     .ShowGridlines \"True\" \n",
    "     .SetSpecials \"enablepolarextralines\" \n",
    "     .SetPlotMode \"Efield\" \n",
    "     .Distance \"1\" \n",
    "     .UseFarfieldApproximation \"True\" \n",
    "     .IncludeUnitCellSidewalls \"True\" \n",
    "     .SetScaleLinear \"True\" \n",
    "     .SetLogRange \"40\" \n",
    "     .SetLogNorm \"0\" \n",
    "     .DBUnit \"0\" \n",
    "     .SetMaxReferenceMode \"abs\" \n",
    "     .EnableFixPlotMaximum \"False\" \n",
    "     .SetFixPlotMaximumValue \"1\" \n",
    "     .SetInverseAxialRatio \"False\" \n",
    "     .SetAxesType \"user\" \n",
    "     .SetAntennaType \"unknown\" \n",
    "     .Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\" \n",
    "     .Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\" \n",
    "     .PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\" \n",
    "     .SetCoordinateSystemType \"spherical\" \n",
    "     .SetAutomaticCoordinateSystem \"True\" \n",
    "     .SetPolarizationType \"Linear\" \n",
    "     .SlantAngle 0.000000e+00 \n",
    "     .Origin \"bbox\" \n",
    "     .Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\" \n",
    "     .SetUserDecouplingPlane \"False\" \n",
    "     .UseDecouplingPlane \"False\" \n",
    "     .DecouplingPlaneAxis \"X\" \n",
    "     .DecouplingPlanePosition \"0.000000e+00\" \n",
    "     .LossyGround \"False\" \n",
    "     .GroundEpsilon \"1\" \n",
    "     .GroundKappa \"0\" \n",
    "     .EnablePhaseCenterCalculation \"False\" \n",
    "     .SetPhaseCenterAngularLimit \"3.000000e+01\" \n",
    "     .SetPhaseCenterComponent \"boresight\" \n",
    "     .SetPhaseCenterPlane \"both\" \n",
    "     .ShowPhaseCenter \"True\" \n",
    "     .ClearCuts \n",
    "\n",
    "     .StoreSettings\n",
    "End With\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "With FarfieldPlot\n",
    "\n",
    "     .Reset\n",
    "\n",
    "     .Plottype (\"3d\")\n",
    "\n",
    "     .Step (5)\n",
    "\n",
    "     .SetColorByValue (True)\n",
    "\n",
    "     .DrawStepLines (False)\n",
    "\n",
    "     .DrawIsoLongitudeLatitudeLines (False)\n",
    "\n",
    "     .SetTheta360 (False)\n",
    "\n",
    "     .CartSymRange (False)\n",
    "\n",
    "     .UseFarfieldApproximation (False)\n",
    "\n",
    "     .SetPlotMode (\"Efield\")\n",
    "\n",
    "     .SetInverseAxialRatio (False)\n",
    "\n",
    "     .Distance (1)\n",
    "\n",
    "     .SetScaleLinear (True)\n",
    "\n",
    "     .SetLogRange (50)\n",
    "\n",
    "     .DBUnit (\"0\")\n",
    "\n",
    "     .EnableFixPlotMaximum (False)\n",
    "\n",
    "     .SetFixPlotMaximumValue (1.0)\n",
    "\n",
    "     .SetAxesType (\"mainlobe\")\n",
    "\n",
    "     .Phistart (1.0, 0.0, 0.0)\n",
    "\n",
    "     .Thetastart (0.0, 1.0, 1.0)\n",
    "\n",
    "     .PolarizationVector (1.0, 1.0, 0.0)\n",
    "\n",
    "     .Origin (\"free\")\n",
    "\n",
    "     .Userorigin (0.0, 0.0, 5.0)\n",
    "\n",
    "     .SetUserMirrorPlane (False)\n",
    "\n",
    "     .UseMirrorPlane (False)\n",
    "\n",
    "     .MirrorPlaneAxis (\"X\")\n",
    "\n",
    "     .MirrorPlanePosition (0.0)\n",
    "\n",
    "     .EnablePhaseCenterCalculation (True)\n",
    "\n",
    "     .SetPhaseCenterAngularLimit (36.3)\n",
    "\n",
    "     .SetPhaseCenterComponent (\"Theta\")\n",
    "\n",
    "     .SetPhaseCenterPlane (\"both\")\n",
    "\n",
    "End With\n",
    "\n",
    " \n",
    "\n",
    "SelectTreeItem(\"Farfields\\farfield (f=16) [1]\")\n",
    "\n",
    "FarfieldPlot.Plot\n",
    "\n",
    "SelectTreeItem(\"Farfields\\farfield (f=30) [1]\")\n",
    "\n",
    "FarfieldPlot.Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "With FarfieldPlot\n",
    ".Plottype \"Polar\"\n",
    ".Vary \"angle1\"\n",
    ".Theta \"90\"\n",
    ".Phi \"90\"\n",
    ".Step \"1\"\n",
    ".Step2 \"1\"\n",
    ".SetLockSteps \"True\"\n",
    ".SetPlotRangeOnly \"False\"\n",
    ".SetThetaStart \"0\"\n",
    ".SetThetaEnd \"180\"\n",
    ".SetPhiStart \"0\"\n",
    ".SetPhiEnd \"360\"\n",
    ".SetTheta360 \"False\"\n",
    ".SymmetricRange \"False\"\n",
    ".SetTimeDomainFF \"False\"\n",
    ".SetFrequency \"-1\"\n",
    ".SetTime \"0\"\n",
    ".SetColorByValue \"True\"\n",
    ".DrawStepLines \"False\"\n",
    ".DrawIsoLongitudeLatitudeLines \"False\"\n",
    ".ShowStructure \"False\"\n",
    ".ShowStructureProfile \"False\"\n",
    ".SetStructureTransparent \"False\"\n",
    ".SetFarfieldTransparent \"False\"\n",
    ".AspectRatio \"Free\"\n",
    ".ShowGridlines \"True\"\n",
    ".SetSpecials \"enablepolarextralines\"\n",
    ".SetPlotMode \"Directivity\"\n",
    ".Distance \"1\"\n",
    ".UseFarfieldApproximation \"True\"\n",
    ".IncludeUnitCellSidewalls \"True\"\n",
    ".SetScaleLinear \"False\"\n",
    ".SetLogRange \"40\"\n",
    ".SetLogNorm \"0\"\n",
    ".DBUnit \"0\"\n",
    ".SetMaxReferenceMode \"abs\"\n",
    ".EnableFixPlotMaximum \"False\"\n",
    ".SetFixPlotMaximumValue \"1\"\n",
    ".SetInverseAxialRatio \"False\"\n",
    ".SetAxesType \"user\"\n",
    ".SetAntennaType \"unknown\"\n",
    ".Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"\n",
    ".Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"\n",
    ".PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"\n",
    ".SetCoordinateSystemType \"spherical\"\n",
    ".SetAutomaticCoordinateSystem \"True\"\n",
    ".SetPolarizationType \"Linear\"\n",
    ".SlantAngle 0.000000e+00\n",
    ".Origin \"bbox\"\n",
    ".Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"\n",
    ".SetUserDecouplingPlane \"False\"\n",
    ".UseDecouplingPlane \"False\"\n",
    ".DecouplingPlaneAxis \"X\"\n",
    ".DecouplingPlanePosition \"0.000000e+00\"\n",
    ".LossyGround \"False\"\n",
    ".GroundEpsilon \"1\"\n",
    ".GroundKappa \"0\"\n",
    ".EnablePhaseCenterCalculation \"False\"\n",
    ".SetPhaseCenterAngularLimit \"3.000000e+01\"\n",
    ".SetPhaseCenterComponent \"boresight\"\n",
    ".SetPhaseCenterPlane \"both\"\n",
    ".ShowPhaseCenter \"True\"\n",
    ".ClearCuts\n",
    ".StoreSettings\n",
    "End With\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "With FarfieldPlot \n",
    "     .Plottype \"3D\" \n",
    "     .Vary \"angle1\" \n",
    "     .Theta \"90\" \n",
    "     .Phi \"90\" \n",
    "     .Step \"5\" \n",
    "     .Step2 \"5\" \n",
    "     .SetLockSteps \"True\" \n",
    "     .SetPlotRangeOnly \"False\" \n",
    "     .SetThetaStart \"0\" \n",
    "     .SetThetaEnd \"180\" \n",
    "     .SetPhiStart \"0\" \n",
    "     .SetPhiEnd \"360\" \n",
    "     .SetTheta360 \"False\" \n",
    "     .SymmetricRange \"False\" \n",
    "     .SetTimeDomainFF \"False\" \n",
    "     .SetFrequency \"-1\" \n",
    "     .SetTime \"0\" \n",
    "     .SetColorByValue \"True\" \n",
    "     .DrawStepLines \"False\" \n",
    "     .DrawIsoLongitudeLatitudeLines \"False\" \n",
    "     .ShowStructure \"False\" \n",
    "     .ShowStructureProfile \"False\" \n",
    "     .SetStructureTransparent \"False\" \n",
    "     .SetFarfieldTransparent \"False\" \n",
    "     .AspectRatio \"Free\" \n",
    "     .ShowGridlines \"True\" \n",
    "     .SetSpecials \"enablepolarextralines\" \n",
    "     .SetPlotMode \"Directivity\" \n",
    "     .Distance \"1\" \n",
    "     .UseFarfieldApproximation \"True\" \n",
    "     .IncludeUnitCellSidewalls \"True\" \n",
    "     .SetScaleLinear \"False\" \n",
    "     .SetLogRange \"40\" \n",
    "     .SetLogNorm \"0\" \n",
    "     .DBUnit \"0\" \n",
    "     .SetMaxReferenceMode \"abs\" \n",
    "     .EnableFixPlotMaximum \"False\" \n",
    "     .SetFixPlotMaximumValue \"1\" \n",
    "     .SetInverseAxialRatio \"False\" \n",
    "     .SetAxesType \"user\" \n",
    "     .SetAntennaType \"unknown\" \n",
    "     .Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\" \n",
    "     .Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\" \n",
    "     .PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\" \n",
    "     .SetCoordinateSystemType \"spherical\" \n",
    "     .SetAutomaticCoordinateSystem \"True\" \n",
    "     .SetPolarizationType \"Linear\" \n",
    "     .SlantAngle 0.000000e+00 \n",
    "     .Origin \"bbox\" \n",
    "     .Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\" \n",
    "     .SetUserDecouplingPlane \"False\" \n",
    "     .UseDecouplingPlane \"False\" \n",
    "     .DecouplingPlaneAxis \"X\" \n",
    "     .DecouplingPlanePosition \"0.000000e+00\" \n",
    "     .LossyGround \"False\" \n",
    "     .GroundEpsilon \"1\" \n",
    "     .GroundKappa \"0\" \n",
    "     .EnablePhaseCenterCalculation \"False\" \n",
    "     .SetPhaseCenterAngularLimit \"3.000000e+01\" \n",
    "     .SetPhaseCenterComponent \"boresight\" \n",
    "     .SetPhaseCenterPlane \"both\" \n",
    "     .ShowPhaseCenter \"True\" \n",
    "     .ClearCuts \n",
    "\n",
    "     .StoreSettings\n",
    "End With\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "2.05\n",
      "2.1\n",
      "2.15\n",
      "2.2\n",
      "2.25\n",
      "2.3\n",
      "2.35\n",
      "2.4\n",
      "2.45\n",
      "2.5\n",
      "2.55\n",
      "2.6\n",
      "2.65\n",
      "2.7\n",
      "2.75\n",
      "2.8\n",
      "2.85\n",
      "2.9\n",
      "2.95\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "start = 2.0\n",
    "end = 3.0\n",
    "step = 0.05\n",
    "\n",
    "# 生成数值序列\n",
    "values = [start + i * step for i in range((int((end - start) / step)) + 1)]\n",
    "\n",
    "# 格式化并输出每个数值，去掉多余的零\n",
    "for value in values:\n",
    "    formatted_value = f\"{value:.2f}\".rstrip('0').rstrip('.')\n",
    "    print(formatted_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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cYGfnx9mzpyJoqIiAEBmZiZGjRoFAPDw8ADDMJg1axYAYPv27Rg6dCjc3d3h5eWFyZMnIy0trdGxFy9ejBdeeAE9evRoc7zLly9H37594ejoCF9fX0ybNs3wf9u3b8esWbMQGxuLXr16YfXq1cjOzsbp06cN92EYBsuXL8fEiRMhk8kQERGBP/74o13nrCNonypCCCGEEELaqU6lQdyiXWZ/3svvjIejuO0f4V9++WX8999/2LJlC3x8fPDaa6/hzJkziI+PBwCoVCq8++676NKlC4qKijB//nzMmjULW7duRXBwMDZu3Ih77rkHycnJcHV1hUwmA6BL1ubPn4+ePXuipqYGb731Fu6++26cO3euwyPKT506hf/7v//Dt99+izFjxqCiogIHDx5s8f6VlZUAAE9Pz0a3v/nmm3j//ffx+eefY+3atbj//vuRmJiIbt26dSiutqCkihBCCCGEEBtUU1ODH374AT///DPGjBkDAFizZg2CgoIM95k9e7bh7xEREfjiiy/Qr18/1NTUwNnZ2ZCw+Pj4NFoXdc899zR6rh9//BFyuRyXL19GXFxch+LNzs6Gk5MTxo8fj8DAQISHh6N3797N3ler1eL555/HkCFDmjzfvffei8cffxwA8O6772LXrl348ssv8c0333QorragpIoQC6XRssivrENeeR3qVBoo1Vo4Sx3g7SxBiKcjpCIh3yESQgghdksmEuLyO+N5ed62SktLg1KpxIABAwy3eXp6okuXLoZ/nz59GosWLcL58+dRXl4OrVYLQJfgdO/evcVjp6am4q233sLx48dRUlLS6HEdTarGjh2L0NBQ9O7dGxMmTMDEiRNx9913w9HRscl9586di4sXL+LQoUNN/m/QoEFN/n3u3LkOxdRWlFQRYgFYlkVGSS1OZpbhdFY5zuVUILNEAaVG2+z9HQQMYgPdMK67L6b1DYKvq9TMERNCCCH2jWEYOIqt+wJnbW0txo8fj/Hjx2PdunWQy+XIzs7G+PHjoVQqW33sHXfcgdDQUKxcuRIBAQHQarWIi4u75eNa4+LiglOnTmHr1q04fPgw3nrrLSxatAgnT55sVCWbN28e/vnnHxw4cKBR1Y1PlFQRwhOWZXEysxzbLxZgb1IhMksVTe4jEjIIcJfBWeIAkVCA6noViqobUF2vxvmcCpzPqcBnu1NwT58gvDS+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qVMYMmRIr2MmIiLfMagiIqIBufrqq7uszUlISJD++5JLLuly7J49e7Bp06YuQZiovLwcbW1t6OjowMSJE6X7U1JSMGLECL/GtGfPHhw7dqxLRggA2tvbUV5eLt0ePXo0dDqddDs7Oxv79u0D4Cnl0+l0uOqqq3p8jpycHMydOxcvv/wyLr/8crz//vuw2+2YN29er+Nqa2tDbGxst/u/n42aNWsWysrKcObMGUydOhUul6vL49u2bev2t02dOrXbeZuamnDddddh7ty5uP/++7s8JgZdFwZjREQUGAZVREQ0IAkJCb2Wu10YYAFAc3Mzrr/+eqxZs6bbsdnZ2T53DdRoNBAEoct9F66Fam5uxiWXXIK//e1v3X43PT1d+m+DwdDtvG63G0Bn0NGXn/3sZ7j99tvxhz/8AevWrcPNN9+M+Pj4Xo9PS0uTgjbRsGHD0NTUhKqqKilbZTKZUFRUBL2+54/ngoICJCUldbnv+8e6XC7cfPPNsFgseOGFF7qdo76+HkDX+SAiosBwTRUREcluwoQJOHDgAIYMGYKioqIuPwkJCRg6dCgMBgO+/vpr6XcaGhpw5MiRLudJT0/HuXPnpNtHjx7tknGZMGECjh49ioyMjG7Pk5iY6NNYx4wZA7fbjS1btvR6zJw5c5CQkIC1a9fik08+wcKFC/s85/jx4/Hdd991CQhvvPFGGAyGHgPNQCxduhT79u3Du+++22N2bP/+/TAYDBg9enRQn5eIKJoxqCIiItktXrwY9fX1uOWWW7Bjxw6Ul5fj008/xR133AGXywWTyYRFixbh/vvvx+eff479+/djwYIF0Gq7fkxdc801eO6557B7927s3LkT//Ef/9El63TbbbchLS0NN9xwA7Zt24YTJ05g8+bN+OUvf4nTp0/7NNYhQ4Zg/vz5WLhwId59913pHBs2bJCO0el0WLBgAVasWIFhw4Zh0qRJfZ7z6quvRnNzMw4cOCDdl5eXh6eeegrPPPMM5s+fj02bNuHkyZP49ttv8eyzz0rP449169bhz3/+M55//nloNBpUVVWhqqoKzc3N0jHbtm3DlClTfMrIERGRbxhUERGR7HJycvDll1/C5XJh5syZGDNmDJYsWYKkpCQpcHryyScxZcoUXH/99Zg+fTp++MMfdlub9dRTTyE3NxdTpkzBrbfeivvuu69L2V18fDy2bt2KvLw8/L//9/8wcuRILFq0CO3t7bBYLD6Pd+3atbjxxhvxn//5nyguLsadd96JlpaWLscsWrQIHR0duOOOO/o9X2pqKv71X/+1W1niL37xC2zcuBG1tbW48cYbMWzYMMyZMwcnTpzAJ5980qVJhS+2bNkCl8uFf/mXf0F2drb0c2ETjTfeeAN33nmnX+clIqK+aYTvF6cTERGFialTp2LcuHH44x//qPRQutm2bRumTZuGyspKZGZm9nv83r17MWPGDJSXl/fYsCMUPv74Y9x7773Yu3dvr+u2iIjIf8xUERER+cFut+P06dN4+OGHMW/ePJ8CKgAYO3Ys1qxZgxMnTsg8wt61tLRg3bp1DKiIiIKM76pERER+eP3117Fo0SKMGzcOr7zyil+/u2DBAnkG5aMbb7xR0ecnIlIrlv8REREREREFgOV/REREREREAWBQRUREREREFAAGVURERERERAFgUEVERERERBQABlVEREREREQBYFBFREREREQUAAZVREREREREAWBQRUREREREFID/D3oUirQnPxXJAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import os\n",
    "import skrf as rf\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "# 指定包含 .s2p 文件的目录路径\n",
    "directory = r'C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data'  # 请将路径替换为你的实际目录\n",
    "\n",
    "# 获取目录下所有 .s2p 文件\n",
    "s2p_files = [f for f in os.listdir(directory) if f.endswith('.s2p')]\n",
    "\n",
    "# 检查是否有 .s2p 文件\n",
    "if not s2p_files:\n",
    "    print(\"目录中没有找到任何 .s2p 文件\")\n",
    "    exit()\n",
    "\n",
    "# 创建图形\n",
    "plt.figure(figsize=(10, 6))\n",
    "\n",
    "# 依次处理每个 .s2p 文件\n",
    "for s2p_file in s2p_files:\n",
    "    file_path = os.path.join(directory, s2p_file)\n",
    "    \n",
    "    # 使用 scikit-rf 读取 Touchstone 文件\n",
    "    network = rf.Network(file_path)\n",
    "    \n",
    "    # 获取 S11 参数并绘制其 dB 值\n",
    "    s11 = network.s[:, 0, 0]  # 1端口网络，S11\n",
    "    if min(20 * np.log10(abs(s11)))<=-10:\n",
    "    # 绘制 S11 的 dB 值\n",
    "        plt.plot(network.f / 1e9, 20 * np.log10(abs(s11)), label=s2p_file)  # 将频率转换为 GHz，幅度转换为 dB\n",
    "        break\n",
    "\n",
    "# 添加图例、标题和标签\n",
    "plt.title('S11 Parameter (Magnitude in dB) of All .s2p Files')\n",
    "plt.xlabel('Frequency (GHz)')\n",
    "plt.ylabel('S11 Magnitude (dB)')\n",
    "plt.legend(loc='best')\n",
    "plt.grid(True)\n",
    "\n",
    "# 显示图像\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ -2.05533,  -2.35706,  -2.80193,  -3.26275,  -3.72535,  -4.34939,\n",
       "        -5.3641 ,  -6.97846,  -9.42359, -13.2102 , -20.3301 , -25.8621 ,\n",
       "       -15.1696 , -10.4408 ,  -7.6833 ,  -5.95871,  -4.83834,  -4.04145,\n",
       "        -3.40363,  -2.88729,  -2.52515,  -2.32826,  -2.24295,  -2.1875 ,\n",
       "        -2.13156,  -2.12618,  -2.24422,  -2.50645,  -2.87486,  -3.32692,\n",
       "        -3.94662,  -4.93467,  -6.52914,  -8.80919, -10.8744 , -10.3719 ,\n",
       "        -8.18215,  -6.36281,  -5.28152,  -4.81011,  -4.7787 ,  -5.05236,\n",
       "        -5.54224,  -6.17881,  -6.84668,  -7.32941,  -7.38223,  -6.94944,\n",
       "        -6.22279,  -5.4412 ,  -4.74493,  -4.17263,  -3.70029,  -3.28163,\n",
       "        -2.8925 ,  -2.5645 ,  -2.38045,  -2.43459,  -2.78644,  -3.4216 ,\n",
       "        -4.21955,  -4.96642,  -5.49112,  -5.83827,  -6.21878,  -6.8099 ,\n",
       "        -7.65951,  -8.72087,  -9.95674, -11.4289 , -13.2242 , -15.0483 ,\n",
       "       -15.6721 , -14.4636 , -12.6749 , -11.0886 ,  -9.75566,  -8.59732,\n",
       "        -7.60831,  -6.82724,  -6.2634 ,  -5.87511,  -5.60219,  -5.41289,\n",
       "        -5.3158 ,  -5.32277,  -5.40392,  -5.48471,  -5.49642,  -5.42804,\n",
       "        -5.31358,  -5.18121,  -5.04623,  -4.95715,  -5.02351,  -5.38448,\n",
       "        -6.15531,  -7.39353,  -9.09488, -11.246  , -13.9851 ])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "20 * np.log10(abs(s11))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2c298b6df10>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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urqwdOlSmM1mvPnmm9i7dy9+9rOfIT09XeujKWLLli3H/flt2LABALBs2TKNT6aMn/zkJ3j88cfx2GOPYd++ffjJT36Cn/70p/j1r3+t9dEU9c1vfhMbNmzA888/j127duHCCy/EBRdcgIaGBq2PFrT+/n7MmTMHv/nNb0b89Z/+9Kd49NFH8cQTT+Czzz5DYmIiLrroIgwNDUXmgCKNqbW1VQQgvv/++1ofRVXp6eniH/7wB62Poaje3l5x0qRJ4oYNG8Szzz5bvO2227Q+kiLWrl0rzpkzR+tjqOp///d/xTPOOEPrY0TMbbfdJlZUVIgej0froyji0ksvFW+66abj3veVr3xFvPbaazU6kfIGBgZEo9Eovv7668e9f968eeI999yj0amUAUD829/+Jv+/x+MR8/LyxIcfflh+X3d3t2i1WsUXX3wxImdiZmUcPT09AICMjAyNT6IOt9uNl156Cf39/Vi8eLHWx1HUypUrcemll+KCCy7Q+iiKq6mpQUFBAcrLy3Httdeirq5O6yMp6p///CcWLFiAZcuWIScnB5WVlfj973+v9bFU4XA48MILL+Cmm25S/OZ4rSxZsgTvvvsuDhw4AADYuXMnPvroI1xyySUan0w5LpcLbrcbcXFxx70/Pj4+5jKdhw8fRnNz83HfS1NTU7Fo0SJs2rQpImeI+luX1eTxeHD77bdj6dKlmDlzptbHUdSuXbuwePFiDA0NISkpCX/7298wffp0rY+lmJdeegnbt2+P2vrxWBYtWoRnnnkGU6ZMQVNTE+6//36ceeaZ2L17N5KTk7U+niJqa2vx+OOP484778T//d//YcuWLfif//kfWCwWLF++XOvjKervf/87uru7sWLFCq2PophVq1bBZrNh6tSpMBqNcLvdePDBB3HttddqfTTFJCcnY/HixXjggQcwbdo05Obm4sUXX8SmTZswceJErY+nqObmZgBAbm7uce/Pzc2Vf01tDFbGsHLlSuzevTvmomQAmDJlCqqqqtDT04NXX30Vy5cvx/vvvx8TAUt9fT1uu+02bNiw4aSfemLB8J9OZ8+ejUWLFqG0tBR/+ctfcPPNN2t4MuV4PB4sWLAAP/7xjwEAlZWV2L17N5544omYC1aeeuopXHLJJSgoKND6KIr5y1/+gj/96U/485//jBkzZqCqqgq33347CgoKYurP7/nnn8dNN92EwsJCGI1GzJs3D9dccw22bdum9dFiDstAo/jud7+L119/He+99x6Kioq0Po7iLBYLJk6ciPnz52PdunWYM2cOfvWrX2l9LEVs27YNra2tmDdvHkwmE0wmE95//308+uijMJlMcLvdWh9RUWlpaZg8eTIOHjyo9VEUk5+ff1LgPG3atJgrdx09ehTvvPMOvvnNb2p9FEXdfffdWLVqFb7+9a9j1qxZuP7663HHHXdg3bp1Wh9NURUVFXj//ffR19eH+vp6bN68GU6nE+Xl5VofTVF5eXkAgJaWluPe39LSIv+a2hisnEAURXz3u9/F3/72N2zcuBETJkzQ+kgR4fF4YLfbtT6GIs4//3zs2rULVVVV8tuCBQtw7bXXoqqqCkajUesjKqqvrw+HDh1Cfn6+1kdRzNKlS09aGXDgwAGUlpZqdCJ1PP3008jJycGll16q9VEUNTAwAIPh+JcXo9EIj8ej0YnUlZiYiPz8fHR1dWH9+vW44oortD6SoiZMmIC8vDy8++678vtsNhs+++yziPU6sgx0gpUrV+LPf/4z/vGPfyA5OVmux6WmpiI+Pl7j0ylj9erVuOSSS1BSUoLe3l78+c9/xn/+8x+sX79e66MpIjk5+aQeo8TERGRmZsZE79H3vvc9XH755SgtLUVjYyPWrl0Lo9GIa665RuujKeaOO+7AkiVL8OMf/xhXXXUVNm/ejCeffBJPPvmk1kdTjMfjwdNPP43ly5fDZIqtb8WXX345HnzwQZSUlGDGjBnYsWMHfv7zn+Omm27S+miKWr9+PURRxJQpU3Dw4EHcfffdmDp1Km688Uatjxa0vr6+47Kzhw8fRlVVFTIyMlBSUoLbb78dP/rRjzBp0iRMmDABP/jBD1BQUIArr7wyMgeMyMxRFAEw4tvTTz+t9dEUc9NNN4mlpaWixWIRs7OzxfPPP198++23tT6WqmJpdPnqq68W8/PzRYvFIhYWFopXX321ePDgQa2Ppbh//etf4syZM0Wr1SpOnTpVfPLJJ7U+kqLWr18vAhD379+v9VEUZ7PZxNtuu00sKSkR4+LixPLycvGee+4R7Xa71kdT1MsvvyyWl5eLFotFzMvLE1euXCl2d3drfayQvPfeeyO+9i1fvlwURe/48g9+8AMxNzdXtFqt4vnnnx/Rv7uCKMbYSkEiIiKKKexZISIiIl1jsEJERES6xmCFiIiIdI3BChEREekagxUiIiLSNQYrREREpGsMVoiIiEjXGKwQERGRrjFYISIiIl1jsEJERES6xmCFiIiIdO3/AWJfDJKt5z4fAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import os\n",
    "import skrf as rf\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "file_path=r'C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\data1.s2p'\n",
    "network = rf.Network(file_path)\n",
    "s11 = network.s[::10, 0, 0]  # 1端口网络的 S11，每 10 个点取一个\n",
    "freq = network.f[::10]  # 每 10 个频率点取一个    \n",
    "\n",
    "# if min(20 * np.log10(abs(s11)))<=-50:\n",
    "# # 绘制 S11 的 dB 值\n",
    "plt.plot(freq/ 1e9, 20 * np.log10(abs(s11)), label=file_path)\n",
    "#plt.plot(network.f / 1e9, s11, label=file_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "network.plot_s_db()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入生成的obj然后stimulate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c:\\Reaserch\\Code\\CEM\\AntennaGPT\\code\\Patch_Antenna.cst\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|          | 0/500 [00:00<?, ?it/s]"
     ]
    },
    {
     "data": {
      "application/vnd.plotly.v1+json": {
       "config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "data": [
        {
         "color": "lightblue",
         "i": [
          5,
          5,
          0,
          2,
          4,
          2
         ],
         "j": [
          0,
          0,
          1,
          3,
          4,
          4
         ],
         "k": [
          2,
          0,
          2,
          4,
          2,
          5
         ],
         "opacity": 0.5,
         "type": "mesh3d",
         "x": [
          -19.3,
          -10,
          -1,
          19.3,
          -1,
          -10
         ],
         "y": [
          -0.73,
          -1,
          -1,
          -0.73,
          8,
          8
         ],
         "z": [
          0,
          0,
          0,
          0,
          0,
          0
         ]
        }
       ],
       "layout": {
        "scene": {
         "xaxis": {
          "visible": false
         },
         "yaxis": {
          "visible": false
         },
         "zaxis": {
          "visible": false
         }
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "fillpattern": {
             "fillmode": "overlay",
             "size": 10,
             "solidity": 0.2
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "autotypenumbers": "strict",
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#636efa",
           "#EF553B",
           "#00cc96",
           "#ab63fa",
           "#FFA15A",
           "#19d3f3",
           "#FF6692",
           "#B6E880",
           "#FF97FF",
           "#FECB52"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "title": {
         "text": "OBJ File Visualization"
        }
       }
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|          | 0/500 [00:40<?, ?it/s]\n"
     ]
    }
   ],
   "source": [
    "# 完整跑仿真程序\n",
    "\n",
    "import numpy as np\n",
    "import triangle\n",
    "import numpy as np\n",
    "from shapely.geometry import Polygon\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append(r\"C:\\Reaserch\\CSTStudioSuite2021\\AMD64\\python_cst_libraries\")\n",
    "import cst.interface\n",
    "\n",
    "import trimesh\n",
    "import plotly.graph_objects as go\n",
    "from tqdm import tqdm\n",
    "line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "\n",
    "\n",
    "# 生成一个随机的二维多边形\n",
    "def generate_random_2d_polygon(num_vertices=6):\n",
    "    #points = np.random.rand(num_vertices, 2)\n",
    "    points = np.random.uniform(-19, 19,size=(num_vertices, 2))\n",
    "    center = np.mean(points, axis=0)\n",
    "    angles = np.arctan2(points[:, 1] - center[1], points[:, 0] - center[0])\n",
    "    points = points[np.argsort(angles)]\n",
    "    return points\n",
    "\n",
    "def generate_polygon_with_fixed_edges2(fixed_edges, num_random_vertices=4):\n",
    "    # 提取固定边的顶点\n",
    "    fixed_points = np.vstack(fixed_edges)\n",
    "    \n",
    "    # 在 -19 到 19 之间生成间隔为 0.1 的点\n",
    "    x_values = np.arange(-19, 19.1, 9)\n",
    "    y_values = np.arange(-19, 19.1, 9)\n",
    "    \n",
    "    # 随机选择 num_random_vertices 个点\n",
    "    random_points = []\n",
    "    while len(random_points) < num_random_vertices:\n",
    "        # 随机选择 x 和 y 坐标\n",
    "        x = np.random.choice(x_values)\n",
    "        y = np.random.choice(y_values)\n",
    "        point = np.array([x, y])\n",
    "        random_points.append(point)\n",
    "    \n",
    "    random_points = np.array(random_points)\n",
    "    \n",
    "    # 将固定的点和随机点合并在一起\n",
    "    all_points = np.vstack([fixed_points, random_points])\n",
    "    \n",
    "    # 计算所有点的中心点\n",
    "    center = np.mean(all_points, axis=0)\n",
    "    \n",
    "    # 按照与中心点的角度对所有点进行排序（确保按逆时针方向排列）\n",
    "    angles = np.arctan2(all_points[:, 1] - center[1], all_points[:, 0] - center[0])\n",
    "    sorted_points = all_points[np.argsort(angles)]\n",
    "    \n",
    "    # 使用 shapely 生成 Polygon\n",
    "    polygon = Polygon(sorted_points)\n",
    "    \n",
    "    return polygon, sorted_points\n",
    "\n",
    "\n",
    "# 生成包含已知边的随机二维多边形（y坐标要大于0.4或者小于0.3）\n",
    "def generate_polygon_with_fixed_edges(fixed_edges, num_random_vertices=4):\n",
    "    # 提取固定边的顶点\n",
    "    fixed_points = np.vstack(fixed_edges)\n",
    "    \n",
    "    # 随机生成其余的点，满足 y > 0.4 或 y < 0.3\n",
    "    random_points = []\n",
    "    while len(random_points) < num_random_vertices:\n",
    "        #point = np.random.rand(2)  # 生成一个随机点\n",
    "        point = np.random.uniform(-19, 19,size=2)\n",
    "        #if point[1] > 0.4 or point[1] < 0.3:  # 仅保留 y 坐标符合条件的点\n",
    "        random_points.append(point)\n",
    "    random_points = np.array(random_points)\n",
    "    \n",
    "    # 将固定的点和随机点合并在一起\n",
    "    all_points = np.vstack([fixed_points, random_points])\n",
    "    \n",
    "    # 计算所有点的中心点\n",
    "    center = np.mean(all_points, axis=0)\n",
    "    \n",
    "    # 按照与中心点的角度对所有点进行排序（确保按逆时针方向排列）\n",
    "    angles = np.arctan2(all_points[:, 1] - center[1], all_points[:, 0] - center[0])\n",
    "    sorted_points = all_points[np.argsort(angles)]\n",
    "    \n",
    "    # 使用 shapely 生成 Polygon\n",
    "    polygon = Polygon(sorted_points)\n",
    "    \n",
    "    return polygon, sorted_points\n",
    "# 对多边形进行三角剖分\n",
    "def constrained_triangulation(polygon_points):\n",
    "    vertices = np.array(polygon_points)\n",
    "    # 定义约束边，保持多边形的边界不被破坏\n",
    "    segments = np.array([[i, (i + 1) % len(vertices)] for i in range(len(vertices))])\n",
    "    \n",
    "    # 使用 triangle 库进行带约束的三角剖分\n",
    "    A = dict(vertices=vertices, segments=segments)\n",
    "    triangulation = triangle.triangulate(A, 'p')\n",
    "    \n",
    "    return triangulation\n",
    "\n",
    "# 将三角剖分结果保存为OBJ文件\n",
    "def export_to_obj(triangulation, filename=\"polygon_triangulated.obj\"):\n",
    "    vertices = triangulation['vertices']\n",
    "    triangles = triangulation['triangles']\n",
    "    \n",
    "    with open(filename, 'w') as f:\n",
    "        # 写入顶点信息\n",
    "        for v in vertices:\n",
    "            f.write(f\"v {v[0]} {v[1]} 0.0\\n\")  # z 设为 0 表示在二维平面上\n",
    "        \n",
    "        # 写入面（每个面由3个顶点构成）\n",
    "        for tri in triangles:\n",
    "            # OBJ 索引从1开始，因此要加1\n",
    "            f.write(f\"f {tri[0] + 1} {tri[1] + 1} {tri[2] + 1}\\n\")\n",
    "\n",
    "\n",
    "# 加载OBJ文件并转换为Plotly格式\n",
    "def plot_obj_in_jupyter(obj_filename):\n",
    "    # 使用trimesh加载OBJ文件\n",
    "    mesh = trimesh.load(obj_filename)\n",
    "    \n",
    "    # 获取顶点和面数据\n",
    "    vertices = mesh.vertices\n",
    "    faces = mesh.faces\n",
    "    \n",
    "    # 创建Plotly图形对象\n",
    "    mesh_plot = go.Mesh3d(\n",
    "        x=vertices[:, 0],\n",
    "        y=vertices[:, 1],\n",
    "        z=vertices[:, 2],\n",
    "        i=faces[:, 0],\n",
    "        j=faces[:, 1],\n",
    "        k=faces[:, 2],\n",
    "        opacity=0.5,\n",
    "        color='lightblue'\n",
    "    )\n",
    "    \n",
    "    # 设置布局\n",
    "    layout = go.Layout(\n",
    "        scene=dict(\n",
    "            xaxis=dict(visible=False),\n",
    "            yaxis=dict(visible=False),\n",
    "            zaxis=dict(visible=False)\n",
    "        ),\n",
    "        title=\"OBJ File Visualization\"\n",
    "    )\n",
    "    \n",
    "    # 创建并展示图像\n",
    "    fig = go.Figure(data=[mesh_plot], layout=layout)\n",
    "    fig.show()\n",
    "\n",
    "def cst_init(fullname,modeler,mws):\n",
    "    # path = os.getcwd()#获取当前py文件所在文件夹\n",
    "    # filename = 'Patch_Antenna.cst'\n",
    "    # fullname = os.path.join(path,filename)\n",
    "    print(fullname)\n",
    "\n",
    "    # project = cst.interface.DesignEnvironment()\n",
    "    # project.set_quiet_mode(False)\n",
    "    # mws = project.new_mws()\n",
    "    mws.save(fullname)\n",
    "    # modeler = mws.modeler\n",
    "    #贴片天线建模基本参数\n",
    "    a = 38.6 #贴片长\n",
    "    b = 38 #贴片宽\n",
    "    w = 1.46 #馈线宽，100欧姆传输线\n",
    "    l = 40 #馈线长\n",
    "    lx = 100 #基板长\n",
    "    ly = 100 #基板宽\n",
    "    ts = 2 #基板厚\n",
    "    tm = 0.035 #金属层厚\n",
    "    Frq = [2,10] #工作频率，单位：GHz\n",
    "\n",
    "    #在CST中加入结构参数，方便后续手动在CST文件中进行操作\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"a\", \"%f\")' % a)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"b\", \"%f\")' % b)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"w\", \"%f\")' % w)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"l\", \"%f\")' % l)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"lx\", \"%f\")' % lx)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ly\", \"%f\")' % ly)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"ts\", \"%f\")' % ts)\n",
    "    modeler.add_to_history('StoreParameter','MakeSureParameterExists(\"tm\", \"%f\")' % tm)\n",
    "    #建模基本参数设置结束\n",
    "    line_break = '\\n'#换行符，后面用于VBA代买的拼接用\n",
    "    #全局单位初始化\n",
    "    sCommand = ['With Units',\n",
    "                '.Geometry \"mm\"',\n",
    "                '.Frequency \"ghz\"',\n",
    "                '.Time \"ns\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define units', sCommand)\n",
    "    #全局单位初始化结束\n",
    "\n",
    "    #工作频率设置\n",
    "    sCommand = 'Solver.FrequencyRange \"%f\",\"%f\"'  % (Frq[0],Frq[1])\n",
    "    modeler.add_to_history('define frequency range', sCommand)\n",
    "    #工作频率设置结束\n",
    "\n",
    "    #背景材料设置\n",
    "    sCommand = ['With Background',\n",
    "                '.ResetBackground',\n",
    "                '.Type \"Normal\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define background', sCommand)\n",
    "    #背景材料设置结束\n",
    "\n",
    "    #边界条件设置。\n",
    "    sCommand = ['With Boundary',\n",
    "                '.Xmin \"expanded open\"',\n",
    "                '.Xmax \"expanded open\"',\n",
    "                '.Ymin \"expanded open\"',\n",
    "                '.Ymax \"expanded open\"',\n",
    "                '.Zmin \"expanded open\"',\n",
    "                '.Zmax \"expanded open\"',\n",
    "                '.Xsymmetry \"none\"',\n",
    "                '.Ysymmetry \"none\"',\n",
    "                '.Zsymmetry \"none\"',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define boundary', sCommand)\n",
    "    #边界条件设置结束\n",
    "\n",
    "    #新建所需介质材料\n",
    "    er1 = 2.65\n",
    "    sCommand = ['With Material',\n",
    "                '.Reset',\n",
    "                '.Name \"material1\"',\n",
    "                '.FrqType \"all\"',\n",
    "                '.Type \"Normal\"',\n",
    "                '.Epsilon %f' %er1,\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define material: material265', sCommand)\n",
    "    #新建所需介质材料结束\n",
    "\n",
    "    #使Bounding Box显示\n",
    "    sCommand = 'Plot.DrawBox \"True\"'\n",
    "    modeler.add_to_history('switch bounding box', sCommand)\n",
    "    #使Bounding Box显示结束\n",
    "\n",
    "    sCommand = 'Plot.ZoomToStructure'\n",
    "    modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "    Str_Name='line1'\n",
    "    Str_Component='Feed'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"-a/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand) \n",
    "\n",
    "    Str_Name='line2'\n",
    "    Str_Component='Feed'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"a/2\",\"lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)  \n",
    "    Str_Name='bottom'\n",
    "    Str_Component='Bottom'\n",
    "    Str_Material='PEC'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "                '.Zrange \"-ts-tm\",\"-ts\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand) \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "    Str_Name='sub'\n",
    "    Str_Component='Sub'\n",
    "    Str_Material='material1'\n",
    "    sCommand = ['With Brick',\n",
    "                '.Reset',\n",
    "                '.Name \"%s\"' % Str_Name,\n",
    "                '.Component \"%s\"' % Str_Component,\n",
    "                '.Material \"%s\"' % Str_Material,\n",
    "                '.Xrange \"-lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-ly/2\",\"ly/2\"',\n",
    "                '.Zrange \"-ts\",\"0\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('define brick:%s:%s' % (Str_Component,Str_Name,), sCommand)\n",
    "    #建模结束\n",
    "\n",
    "    sCommand = 'Plot.ZoomToStructure'\n",
    "    modeler.add_to_history('ZoomToStructure', sCommand)#缩放到适合大小，就和在CST里面按空格是一个效果\n",
    "\n",
    "    #端口设置，采用的方法和在CST里面选中一个面然后设置端口是一样的操作，这里完全复现\n",
    "    #端口1\n",
    "    sCommand = 'Pick.PickFaceFromId \"Feed:line1\",4'\n",
    "    modeler.add_to_history('pick face', sCommand)\n",
    "    sCommand = ['With Port',\n",
    "                '.Reset',\n",
    "                '.PortNumber 1',\n",
    "                '.Label  \"\"',\n",
    "                '.NumberOfModes 1',\n",
    "                '.AdjustPolarization \"False\"',\n",
    "                '.PolarizationAngle 0.0',\n",
    "                '.ReferencePlaneDistance 0',\n",
    "                '.TextSize 50',\n",
    "                '.TextMaxLimit 0',\n",
    "                '.Coordinates \"Picks\"',\n",
    "                '.Orientation \"positive\"',\n",
    "                '.PortOnBound \"False\"',\n",
    "                '.ClipPickedPortToBound \"False\"',\n",
    "                '.Xrange \"-lx/2\",\"-lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "                '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "                '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "                '.SingleEnded \"False\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)     \n",
    "    modeler.add_to_history('define port1', sCommand)\n",
    "\n",
    "    #端口2\n",
    "    sCommand = 'Pick.PickFaceFromId \"Feed:line2\",6'\n",
    "    modeler.add_to_history('pick face', sCommand)\n",
    "    sCommand = ['With Port',\n",
    "                '.Reset',\n",
    "                '.PortNumber 2',\n",
    "                '.Label  \"\"',\n",
    "                '.NumberOfModes 1',\n",
    "                '.AdjustPolarization \"False\"',\n",
    "                '.PolarizationAngle 0.0',\n",
    "                '.ReferencePlaneDistance 0',\n",
    "                '.TextSize 50',\n",
    "                '.TextMaxLimit 0',\n",
    "                '.Coordinates \"Picks\"',\n",
    "                '.Orientation \"positive\"',\n",
    "                '.PortOnBound \"False\"',\n",
    "                '.ClipPickedPortToBound \"False\"',\n",
    "                '.Xrange \"lx/2\",\"lx/2\"',\n",
    "                '.Yrange \"-w/2\",\"w/2\"',\n",
    "                '.Zrange \"0\",\"tm\"',\n",
    "                '.XrangeAdd \"0.0\",\"0.0\"',\n",
    "                '.YrangeAdd \"3*ts\",\"3*ts\"',\n",
    "                '.ZrangeAdd \"ts\",\"3*ts\"',\n",
    "                '.SingleEnded \"False\"',\n",
    "                '.Create',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)     \n",
    "    modeler.add_to_history('define port2', sCommand)\n",
    "    #端口设置结束\n",
    "    # 原版的\n",
    "    # #设置远场方向图的Monitor\n",
    "    # sCommand = ['With Monitor',\n",
    "    #             '.Reset',\n",
    "    #             '.Domain \"Frequency\"',\n",
    "    #             '.FieldType \"Farfield\"',\n",
    "    #             #'.ExportFarfieldSource \"False\"',\n",
    "    #             '.ExportFarfieldSource \"True\"',\n",
    "    #             '.UseSubvolume \"False\"',\n",
    "    #             '.Coordinates \"Picks\"',\n",
    "    #             '.SetSubvolume \"50\", \"50\", \"-0.73\", \"0.73\", \"0\", \"0.035\"',\n",
    "    #             '.SetSubvolumeOffset \"10\", \"10\", \"10\", \"10\", \"10\", \"10\" ',\n",
    "    #             '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "    #             '.SetSubvolumeOffsetType \"FractionOfWavelength\" ',\n",
    "    #             '.EnableNearfieldCalculation \"True\" ',\n",
    "    #             '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.05),\n",
    "    #             'End With']\n",
    "    # sCommand = line_break.join(sCommand) \n",
    "    # modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "    # #设置远场方向图的Monitor结束\n",
    "\n",
    "\n",
    "\n",
    "    # 程序里面的\n",
    "    # 设置远场方向图的Monitor\n",
    "    sCommand = ['With Monitor',\n",
    "                '.Reset',\n",
    "                '.Domain \"Frequency\"',\n",
    "                '.FieldType \"Farfield\"',\n",
    "                #'.ExportFarfieldSource \"False\"',\n",
    "                '.ExportFarfieldSource \"True\"',\n",
    "                '.UseSubvolume \"False\"',\n",
    "                '.Coordinates \"Structure\"',\n",
    "                '.SetSubvolume \"-50\", \"50\", \"-50\", \"50\", \"-2.035\", \"6.035\"',\n",
    "                '.SetSubvolumeOffset \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\"',\n",
    "                '.SetSubvolumeInflateWithOffset \"False\" ',\n",
    "                '.CreateUsingLinearStep \"%f\", \"%f\", \"%f\"' % (Frq[0],Frq[1],0.2),\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand) \n",
    "    modeler.add_to_history('define farfield monitor (using linear step)',sCommand)\n",
    "    #设置远场方向图的Monitor结束\n",
    "\n",
    "# With Monitor\n",
    "#           .Reset \n",
    "#           .Domain \"Frequency\"\n",
    "#           .FieldType \"Efield\"\n",
    "#           .Dimension \"Volume\" \n",
    "#           .UseSubvolume \"False\" \n",
    "#           .Coordinates \"Structure\" \n",
    "#           .SetSubvolume \"-50\", \"50\", \"-50\", \"50\", \"-2.035\", \"6.035\" \n",
    "#           .SetSubvolumeOffset \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\", \"0.0\" \n",
    "#           .SetSubvolumeInflateWithOffset \"False\" \n",
    "#           .CreateUsingLinearStep \"2\", \"10\", \"0.9\"\n",
    "# End With\n",
    "\n",
    "\n",
    "# Mesh.SetCreator \"High Frequency\" \n",
    "\n",
    "# With Solver \n",
    "#      .Method \"Hexahedral\"\n",
    "#      .CalculationType \"TD-S\"\n",
    "#      .StimulationPort \"All\"\n",
    "#      .StimulationMode \"All\"\n",
    "#      .SteadyStateLimit \"-40\"\n",
    "#      .MeshAdaption \"False\"\n",
    "#      .AutoNormImpedance \"False\"\n",
    "#      .NormingImpedance \"50\"\n",
    "#      .CalculateModesOnly \"False\"\n",
    "#      .SParaSymmetry \"False\"\n",
    "#      .StoreTDResultsInCache  \"False\"\n",
    "#      .FullDeembedding \"False\"\n",
    "#      .SuperimposePLWExcitation \"False\"\n",
    "#      .UseSensitivityAnalysis \"False\"\n",
    "# End With\n",
    "\n",
    "    #求解\n",
    "    sCommand = ['Mesh.SetCreator \"High Frequency\" ',\n",
    "                'With Solver',\n",
    "                '.Method \"Hexahedral\"',\n",
    "                '.CalculationType \"TD-S\"',\n",
    "                '.StimulationPort \"All\"',\n",
    "                '.StimulationMode \"All\"',\n",
    "                '.SteadyStateLimit \"-40\"',\n",
    "                '.MeshAdaption \"False\"',\n",
    "                '.AutoNormImpedance \"False\"',\n",
    "                '.NormingImpedance \"50\"',\n",
    "                '.CalculateModesOnly \"False\"',\n",
    "                '.SParaSymmetry \"False\"',\n",
    "                #'.StoreTDResultsInCache  \"False\"',\n",
    "                '.StoreTDResultsInCache  \"True\"',\n",
    "                '.FullDeembedding \"False\"',\n",
    "                '.SuperimposePLWExcitation \"False\"',\n",
    "                '.UseSensitivityAnalysis \"False\"',         \n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand) \n",
    "    modeler.add_to_history('define Mesh.SetCreator',sCommand)\n",
    "\n",
    "    # # 设置成极坐标\n",
    "    # sCommand =  ['With FarfieldPlot',\n",
    "    #     '.Plottype \"Polar\"',\n",
    "    #     '.Vary \"angle1\"',\n",
    "    #     '.Theta \"90\"',\n",
    "    #     '.Phi \"90\"' ,\n",
    "    #     '.Step \"1\"',\n",
    "    #     '.Step2 \"1\"',\n",
    "    #     '.SetLockSteps \"True\"',\n",
    "    #     '.SetPlotRangeOnly \"False\"',\n",
    "    #     '.SetThetaStart \"0\"',\n",
    "    #     '.SetThetaEnd \"180\"' ,\n",
    "    #     '.SetPhiStart \"0\"' ,\n",
    "    #     '.SetPhiEnd \"360\"' ,\n",
    "    #     '.SetTheta360 \"False\"' ,\n",
    "    #     '.SymmetricRange \"False\"' ,\n",
    "    #     '.SetTimeDomainFF \"False\"' ,\n",
    "    #     '.SetFrequency \"-1\"' ,\n",
    "    #     '.SetTime \"0\"' ,\n",
    "    #     '.SetColorByValue \"True\"' ,\n",
    "    #     '.DrawStepLines \"False\"' ,\n",
    "    #     '.DrawIsoLongitudeLatitudeLines \"False\"' ,\n",
    "    #     '.ShowStructure \"False\"' ,\n",
    "    #     '.ShowStructureProfile \"False\"' ,\n",
    "    #     '.SetStructureTransparent \"False\"' ,\n",
    "    #     '.SetFarfieldTransparent \"False\"' ,\n",
    "    #     '.AspectRatio \"Free\"' ,\n",
    "    #     '.ShowGridlines \"True\"' ,\n",
    "    #     '.SetSpecials \"enablepolarextralines\"' ,\n",
    "    #     '.SetPlotMode \"Directivity\"' ,\n",
    "    #     '.Distance \"1\"' ,\n",
    "    #     '.UseFarfieldApproximation \"True\"' ,\n",
    "    #     '.IncludeUnitCellSidewalls \"True\"' ,\n",
    "    #     '.SetScaleLinear \"False\"' ,\n",
    "    #     '.SetLogRange \"40\"' ,\n",
    "    #     '.SetLogNorm \"0\"' ,\n",
    "    #     '.DBUnit \"0\"' ,\n",
    "    #     '.SetMaxReferenceMode \"abs\"' ,\n",
    "    #     '.EnableFixPlotMaximum \"False\"' ,\n",
    "    #     '.SetFixPlotMaximumValue \"1\"' ,\n",
    "    #     '.SetInverseAxialRatio \"False\"' ,\n",
    "    #     '.SetAxesType \"user\"' ,\n",
    "    #     '.SetAntennaType \"unknown\"',\n",
    "    #     '.Phistart \"1.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.Thetastart \"0.000000e+00\", \"0.000000e+00\", \"1.000000e+00\"' ,\n",
    "    #     '.PolarizationVector \"0.000000e+00\", \"1.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.SetCoordinateSystemType \"spherical\"' ,\n",
    "    #     '.SetAutomaticCoordinateSystem \"True\"' ,\n",
    "    #     '.SetPolarizationType \"Linear\"' ,\n",
    "    #     '.SlantAngle 0.000000e+00' ,\n",
    "    #     '.Origin \"bbox\"' ,\n",
    "    #     '.Userorigin \"0.000000e+00\", \"0.000000e+00\", \"0.000000e+00\"' ,\n",
    "    #     '.SetUserDecouplingPlane \"False\"' ,\n",
    "    #     '.UseDecouplingPlane \"False\"' ,\n",
    "    #     '.DecouplingPlaneAxis \"X\"' ,\n",
    "    #     '.DecouplingPlanePosition \"0.000000e+00\"' ,\n",
    "    #     '.LossyGround \"False\"' ,\n",
    "    #     '.GroundEpsilon \"1\"' ,\n",
    "    #     '.GroundKappa \"0\"' ,\n",
    "    #     '.EnablePhaseCenterCalculation \"False\"' ,\n",
    "    #     '.SetPhaseCenterAngularLimit \"3.000000e+01\"' ,\n",
    "    #     '.SetPhaseCenterComponent \"boresight\"' ,\n",
    "    #     '.SetPhaseCenterPlane \"both\"' ,\n",
    "    #     '.ShowPhaseCenter \"True\"' ,\n",
    "    #     '.ClearCuts' ,\n",
    "    #     '.StoreSettings',\n",
    "    #     'End With']\n",
    "\n",
    "    # sCommand = line_break.join(sCommand)\n",
    "    # modeler.add_to_history('FarfieldPlot Polar', sCommand)\n",
    "\n",
    "def cst_import_obj(modeler,file_path):\n",
    "    #file_path=\"C:\\\\Reaserch\\\\Code\\\\CEM\\\\AntennaGPT\\\\code\\\\polygon_triangulated3.obj\"\n",
    "    Str_Name='patch'\n",
    "    Str_Component='Patch'\n",
    "    sCommand = ['With OBJ',\n",
    "                '.Reset',\n",
    "                '.FileName (\"%s\")' % file_path,\n",
    "                '.Name (\"test\")',\n",
    "                '.Layer (\"Patch\")',\n",
    "                '.ScaleFactor (\"1\")',\n",
    "                '.ImportToActiveCoordinateSystem (False)',\n",
    "                '.Read',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Import OBJ File', sCommand)\n",
    "    # pick一个face\n",
    "    sCommand = 'Pick.PickFaceFromId \"Patch:test\",0'\n",
    "    modeler.add_to_history('pick face Patch:test', sCommand)\n",
    "\n",
    "    #  Extrude Face\n",
    "    sCommand = ['With Extrude',\n",
    "            '.Reset',\n",
    "            '.Name (\"solid2\")',\n",
    "            '.Component (\"component1\")',\n",
    "            '.Material (\"PEC\")',\n",
    "            '.Mode (\"Picks\")',\n",
    "            '.Height (\"tm\")',\n",
    "            '.Taper (5)',\n",
    "            '.UsePicksForHeight (False)',\n",
    "            '.DeleteBaseFaceSolid (False)',\n",
    "            '.ClearPickedFace (True)',\n",
    "            '.Create',\n",
    "            'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Extrude Component (\"component1\")', sCommand)\n",
    "def cst_delete_compo(modeler):\n",
    "    sCommand = 'Component.Delete \"component1\"'\n",
    "    modeler.add_to_history('Delete component1', sCommand)\n",
    "    sCommand = 'Component.Delete \"Patch\"'\n",
    "    modeler.add_to_history('Delete Patch', sCommand)\n",
    "def cst_run(modeler,mws,fullname):\n",
    "    #仿真开始\n",
    "    modeler.run_solver()\n",
    "    #仿真结束\n",
    "\n",
    "    mws.save(fullname)#保存\n",
    "def cst_export_s(modeler,file_path):\n",
    "    # 导出\n",
    "    sCommand = ['With TOUCHSTONE',\n",
    "                '.Reset',\n",
    "                '.FileName (\"%s\")' %(file_path),\n",
    "                '.Impedance (100)',\n",
    "                '.FrequencyRange (\"Full\")',\n",
    "                '.Renormalize (False)',\n",
    "                '.UseARResults (False)',\n",
    "                '.SetNSamples (1001)',\n",
    "                '.Format (\"DB\")',\n",
    "                '.Write',\n",
    "                'End With']\n",
    "    sCommand = line_break.join(sCommand)\n",
    "    modeler.add_to_history('Export TOUCHSTONE s', sCommand)\n",
    "\n",
    "\n",
    "def cst_export_farfiled(i):\n",
    "\n",
    "    for j in range(200,1100,5):\n",
    "        # 导出\n",
    "        sCommand =  ['SelectTreeItem (\"Farfields\\farfield（f=%.2f）[1]\")' % j,\n",
    "                    'With ASCIIExport',\n",
    "                    '.Reset',\n",
    "                    '.FileName (\"C:\\Reaserch\\Code\\CEM\\AntennaGPT\\data\\Farfiled\\data%s\\example.txt\")' % str(j),\n",
    "                    '.Mode (\"FixedNumber\")',\n",
    "                    '.Execute',\n",
    "                    'End With']\n",
    "\n",
    "        sCommand = line_break.join(sCommand)\n",
    "        modeler.add_to_history('Export farfiled ASCII', sCommand) \n",
    "# 主程序\n",
    "if __name__ == \"__main__\":\n",
    "    # 路径\n",
    "    file='../data/gap/'\n",
    "\n",
    "    path = os.getcwd()\n",
    "    filename = 'Patch_Antenna.cst'\n",
    "    fullname = os.path.join(path,filename)\n",
    "\n",
    "    # 假设有两条固定的边\n",
    "    fixed_edge_1 = np.array([[19.3, 0.73], [19.3, -0.73]])  # 第一条固定边\n",
    "    fixed_edge_2 = np.array([[-19.3, 0.73], [-19.3, -0.73]])  # 第二条固定边\n",
    "\n",
    "    #polygon_points = generate_random_2d_polygon(num_vertices)\n",
    "\n",
    "    # 生成一个随机多边形，包含固定的边，且随机点的y坐标满足要求\n",
    "    project = cst.interface.DesignEnvironment()\n",
    "    project.set_quiet_mode(False)\n",
    "    mws = project.new_mws()\n",
    "    modeler = mws.modeler\n",
    "\n",
    "    cst_init(fullname,modeler,mws)\n",
    "    \n",
    "    for i in tqdm(range(500)):\n",
    "        \n",
    "        file_obj=r'C:\\Reaserch\\Code\\CEM\\Tranformers\\output.obj'\n",
    "        file_s2p=file+'data'+str(i)\n",
    "        \n",
    "\n",
    "        #polygon, sorted_points = generate_polygon_with_fixed_edges2([fixed_edge_1, fixed_edge_2], num_random_vertices=5)\n",
    "\n",
    "        # 进行带约束的三角剖分\n",
    "        #triangulation = constrained_triangulation(sorted_points)\n",
    "        \n",
    "        # 导出为OBJ文件\n",
    "        #export_to_obj(triangulation,file_obj)\n",
    "        \n",
    "        #print(\"OBJ 文件已生成：\"+file_obj)\n",
    "        # 展示生成的 OBJ 文件\n",
    "        plot_obj_in_jupyter(file_obj)\n",
    "        \n",
    "        cst_import_obj(modeler,os.path.abspath(file_obj))\n",
    "        cst_run(modeler,mws,fullname)\n",
    "        cst_export_s(modeler,os.path.abspath(file_s2p))\n",
    "        #cst_delete_compo(modeler)\n",
    "        break\n",
    "        \n",
    "        \n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
